Обработчик события элемента управления WinForms удаляется при выборе другого и, таким образом, становится «не связанным» - PullRequest
0 голосов
/ 21 марта 2011

Вопрос о дизайнере WinForms и о том, как настроить поведение. Несколько раз я видел, что когда вы выбираете другой обработчик события для кнопки, он удаляет старый (например, код), когда он становится неиспользуемым.

Я хочу избежать такого поведения, но не могу найти конфигурацию для этого. Кто-нибудь намекнет? Спасибо!

Обновление Поскольку множественные комментарии ставят под сомнение действия, которые инициируют это в первую очередь, я хотел бы отметить, что это больше всего поразило меня при рефакторинге существующей кодовой базы.

Ответы [ 2 ]

1 голос
/ 21 марта 2011

Для этого нет конфигурации. Дизайнер делает все правильно, он удаляет только те обработчики событий, которые не имеют кода. Как только вы помещаете что-то в тело метода, оно сохраняет то, что вы написали, и генерирует новый метод. Это гарантирует, что вы не потеряете код , а гарантирует, что у вас нет мертвых методов, засоряющих ваш код.

Помните, что добавление более одного обработчика события для элемента управления в одном классе (форме) имеет очень мало смысла. Вы должны просто объединить код обработчиков. Это также гарантирует, что у вас не будет никаких сюрпризов, порядок, в котором запускается несколько подписчиков одного и того же события, довольно непредсказуем. Конструктор поддерживает только один обработчик событий, просто потому что он не может отследить более одного.

1 голос
/ 21 марта 2011

Именно так работает дизайнер - вы не можете его изменить.

Что вы можете сделать, чтобы обойти вашу проблему, это добавить обработчики событий в код, а не в конструктор:

public Form1()
{
    InitializeComponent();
    this.button1.Click += new EventHandler(button1_Click);
    this.button1.Click +=new EventHandler(button1_Click2);
}

Должен отметить, что я сомневаюсь в необходимости двух отдельных обработчиков событий.

...