这是我为控件设置事件的最佳方式吗?

时间:2009-12-15 00:22:38

标签: c# winforms events

我在运行时设置它们,我有点担心这最终会使我的应用程序陷入困境。

有更好的方法吗?

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);
    }

4 个答案:

答案 0 :(得分:3)

我不明白为什么这会让你的应用程序陷入困境,因为无论如何它们都是在运行时设置的(作为InitializeComponent的一部分,如果你使用设计器连接它)。当他们设置时,您只需要更改

此外,您可以从每个部分删除“new EventHandler”部分:

//like this
Andromeda.MouseEnter += HeroMouseEnter;

答案 1 :(得分:3)

请记住在处理对象时取消订阅事件。 请查看this文章。

答案 2 :(得分:2)

这没有问题,它不会让您的应用程序陷入困境......

...除

如果您多次调用此函数,对于您的类的单个实例,可能会导致问题。每次拨打SetPictureBoxEvents()时,您都会获得一个附加到您的事件处理程序的代表集。如果你这四次打电话,并且没有取消订阅,那么你的例程将在事件发生时每次运行4次。

答案 3 :(得分:1)

此处没有问题,用户移动鼠标时只能触发一个事件。这需要大约十几纳秒。此外,这些事件发生在“人 - 时”,由用户移动鼠标触发。他/她会将任何不到20毫秒的时间视为“即时”。你有一个问题的1:166,666的余量。