Это лучший способ для меня установить события для моих элементов управления? - PullRequest
1 голос
/ 15 декабря 2009

Я устанавливаю их во время выполнения, я боюсь, что это в конечном итоге приведет к зависанию моего приложения.

Есть ли лучший способ?

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 ]

3 голосов
/ 15 декабря 2009

Только не забудьте отписаться о событиях, когда объект утилизируется. Взгляните на эту статью.

3 голосов
/ 15 декабря 2009

Я не понимаю, почему это может привести к сбою в работе вашего приложения, поскольку они все равно устанавливаются во время выполнения (как часть InitializeComponent, если вы подключите его с помощью конструктора). Вы бы просто изменили , когда они будут установлены.

Кроме того, вы можете удалить часть "нового EventHandler" из каждого:

//like this
Andromeda.MouseEnter += HeroMouseEnter;
2 голосов
/ 15 декабря 2009

С этим проблем нет, и ваше приложение не застрянет ...

За исключением ...

Если вы вызываете эту функцию более одного раза, для одного экземпляра вашего класса вы можете вызвать проблемы. Каждый раз, когда вы звоните SetPictureBoxEvents(), вы получаете новый набор делегатов, прикрепленный к вашему обработчику событий. Если вы позвоните по этому номеру четыре раза и не откажетесь от подписки, ваши подпрограммы будут запускаться 4 раза каждый раз, когда возникает событие.

1 голос
/ 15 декабря 2009

Здесь нет проблем, может быть только одно событие, вызванное движением мыши. Это занимает около десятка наносекунд. Более того, эти события происходят в «человеческое время», вызванное движением мыши. Он / она воспримет все, что занимает менее 20 миллисекунд, как «мгновенное». У вас есть запас 1: 166 666 проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...