Bạn nên kết nối một đơn MouseEnter
và MouseLeave
cho mỗi điều khiển cần chức năng này (thay vì viết phiên bản mới của từng phương pháp cho mỗi điều khiển). Giả sử bạn đang sử dụng Visual Studio, điều này có thể được thực hiện bằng cách thay đổi tên phương thức đích cho sự kiện, trong mỗi thuộc tính của Button. Nếu bạn viết mã sau trước, thì phương thức này sẽ xuất hiện trong danh sách thả xuống của các thuộc tính MouseEnter
và MouseLeave
sự kiện.
Mã này sau đó sẽ cần phải kiểm tra mà nút mà từ đó sự kiện này đã bị sa thải, như sau:
private void btnWithHoverBorder_MouseEnter(object sender, EventArgs e)
{
Button eventButton = (Button) sender;
oldColor = eventButton.FlatAppearance.BorderColor;
eventButton.FlatAppearance.BorderColor = mouseOverColor;
}
private void btnWithHoverBorder_MouseLeave(object sender, EventArgs e)
{
Button eventButton = (Button) sender;
eventButton.FlatAppearance.BorderColor = oldColor;
}
Tôi đoán oldColor
là một toàn cầu? Điều này có thể bị mất đồng bộ nếu có điều gì đó "kỳ quặc" xảy ra khi sự kiện MouseEnter
của bạn được kích hoạt cho một nút khác, trước khi bắt gặp MouseLeave
tương ứng. Để làm cho điều này mạnh mẽ hơn, tôi sẽ xem xét việc lưu trữ màu cũ trên thuộc tính của .tag
của Button, để nó được khép kín.
Ví dụ:
private void btnWithHoverBorder_MouseEnter(object sender, EventArgs e)
{
Button eventButton = (Button) sender;
eventButton.tag = eventButton.FlatAppearance.BorderColor;
eventButton.FlatAppearance.BorderColor = mouseOverColor;
}
private void btnWithHoverBorder_MouseLeave(object sender, EventArgs e)
{
Button eventButton = (Button) sender;
eventButton.FlatAppearance.BorderColor = (Color)eventButton.tag;
}
(Thẻ về cơ bản là một cái móc trên đó gắn thẻ "bất cứ điều gì" liên quan đến một trường hợp cụ thể của một điều khiển, rằng không có đã là một tài sản cho Đó là kiểu Object
đó. có nghĩa là bạn có thể gắn thẻ bất kỳ thứ gì ở đó, nhưng khi bạn đọc từ đó, bạn cần truyền lại cho bất kỳ loại nào bạn đặt ở vị trí đầu tiên.Nhưng vì nó là Object
, bạn có thể đặt bất kỳ thứ gì ở đó, bao gồm ví dụ: lớp tùy chỉnh chứa nhiều các thuộc tính hoặc một mảng, v.v. nếu bạn cần gắn thẻ một điều khiển với nhiều thứ).
Cảm ơn bạn! Chính xác những gì tôi muốn. – davidwroxy
@davidwroxy Hoàn toàn là người bạn tình của tôi, và cảm ơn vì đã chấp nhận! Tôi lưu ý bạn hiếm khi "chấp nhận" các câu trả lời khác mà (có thể) đã trả lời các câu hỏi của bạn. Nếu bạn có một khoảnh khắc, bạn sẽ nhớ đánh dấu là "chấp nhận" những câu trả lời (nếu có) mà _have_ giải quyết vấn đề của bạn, và/hoặc upvote những người đã được hữu ích cho bạn? – Sepster
Tôi vừa hoàn thành việc đánh dấu các câu trả lời đã giải quyết được vấn đề của mình. Tôi quên làm điều này. Cảm ơn bạn đã nhắc nhở tôi. – davidwroxy