我在运行时设置它们,我有点担心这最终会使我的应用程序陷入困境。
有更好的方法吗?
public MainForm()
{
InitializeComponent();
SetPictureBoxEvents();
}
private void SetPictureBoxEvents()
{
Andromeda.MouseEnter += new EventHandler(HeroMouseEnter);
Andromeda.MouseLeave += new EventHandler(HeroMouseLeave);
Engineer.MouseEnter += new EventHandler(HeroMouseEnter);
Engineer.MouseLeave += new EventHandler(HeroMouseLeave);
Nighthound.MouseEnter += new EventHandler(HeroMouseEnter);
Swiftblade.MouseEnter += new EventHandler(HeroMouseEnter);
}
答案 0 :(得分:3)
我不明白为什么这会让你的应用程序陷入困境,因为无论如何它们都是在运行时设置的(作为InitializeComponent的一部分,如果你使用设计器连接它)。当他们设置时,您只需要更改。
此外,您可以从每个部分删除“new EventHandler”部分:
//like this
Andromeda.MouseEnter += HeroMouseEnter;
答案 1 :(得分:3)
请记住在处理对象时取消订阅事件。 请查看this文章。
答案 2 :(得分:2)
这没有问题,它不会让您的应用程序陷入困境......
...除
如果您多次调用此函数,对于您的类的单个实例,可能会导致问题。每次拨打SetPictureBoxEvents()
时,您都会获得一个附加到您的事件处理程序的新代表集。如果你这四次打电话,并且没有取消订阅,那么你的例程将在事件发生时每次运行4次。
答案 3 :(得分:1)
此处没有问题,用户移动鼠标时只能触发一个事件。这需要大约十几纳秒。此外,这些事件发生在“人 - 时”,由用户移动鼠标触发。他/她会将任何不到20毫秒的时间视为“即时”。你有一个问题的1:166,666的余量。