2013-04-01 108 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

相关问题