您应该为每个需要此功能的控件(而不是为每个控件编写每个方法的新版本)连线一个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