您應該爲每個需要此功能的控件(而不是爲每個控件編寫每個方法的新版本)連線一個MouseEnter
和MouseLeave
。假設您使用Visual Studio,可以通過在每個Button的屬性窗格中更改事件的目標方法名稱來完成此操作。如果您先寫下面的代碼,那麼此方法將出現在屬性的MouseEnter
和MouseLeave
事件的下拉列表中。然後
的代碼需要檢查其按鈕從該事件被觸發,如下所示:
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;
}
我相信oldColor
是一個全球性的?如果某個「奇怪」事件發生在您的MouseEnter
事件被另一個按鈕觸發,並且相應的MouseLeave
被捕獲之前,這可能會失去同步。爲了使這個更強大,我會考慮將舊顏色存儲在Button的.tag
屬性中,以便它是獨立的。
如:
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;
}
(標籤基本上是在其上標記「什麼」相關的控制的特定實例的鉤子,有沒有一個屬性這是Object
類型的哪個。意味着你可以在那裏標記任何東西,但是當你讀取它時,你需要將它放回到你放置在那裏的任何類型,但因爲它是一個Object
,所以你可以放置任何東西,包括例如包含多個屬性或數組等,如果你需要用一個以上的東西來標記控件)。
謝謝!正是我想要的。 – davidwroxy
@davidwroxy絕對是我的伴侶,感謝接受!我注意到你很少「接受」(可能)回答你的問題的其他答案。如果你有一個時刻你會介意標記爲「接受」那些解決你的問題的答案(如果有的話),和/或提高那些對你有用的答案嗎? – Sepster
我剛剛完成了解答我的問題的答案。我忘了這麼做。謝謝你提醒我。 – davidwroxy