2013-04-01 33 views
5

在我用C#編寫的Windows窗體應用程序中,我有一堆按鈕。當用戶的鼠標懸停在按鈕上時,我希望按鈕的邊框更改。跨多個控件共享一個事件處理程序

目前,我有(每個按鈕複印件)以下的多個實例:

private void btnStopServer_MouseEnter(object sender, EventArgs e) 
{ 
    oldColor = btnStopServer.FlatAppearance.BorderColor; 
    btnStopServer.FlatAppearance.BorderColor = mouseOverColor; 
} 

private void btnStopServer_MouseLeave(object sender, EventArgs e) 
{ 
    btnStopServer.FlatAppearance.BorderColor = oldColor; 
} 

因爲我有很多按鈕,代碼改變按鈕邊框的顏色佔用了大量的空間。

有沒有更簡單的方法可以做到這一點?

回答

5

您應該爲每個需要此功能的控件(而不是爲每個控件編寫每個方法的新版本)連線一個MouseEnterMouseLeave。假設您使用Visual Studio,可以通過在每個Button的屬性窗格中更改事件的目標方法名稱來完成此操作。如果您先寫下面的代碼,那麼此方法將出現在屬性的MouseEnterMouseLeave事件的下拉列表中。然後

的代碼需要檢查按鈕從該事件被觸發,如下所示:

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,所以你可以放置任何東西,包括例如包含多個屬性或數組等,如果你需要用一個以上的東西來標記控件)。

+0

謝謝!正是我想要的。 – davidwroxy

+0

@davidwroxy絕對是我的伴侶,感謝接受!我注意到你很少「接受」(可能)回答你的問題的其他答案。如果你有一個時刻你會介意標記爲「接受」那些解決你的問題的答案(如果有的話),和/或提高那些對你有用的答案嗎? – Sepster

+0

我剛剛完成了解答我的問題的答案。我忘了這麼做。謝謝你提醒我。 – davidwroxy

相關問題