2010-02-05 2 views
2

Допустим, у нас есть форма, состоящая из 20 элементов управления, например кнопок. Мы хотим создать обработчики для события On-click для всех из них.Обработка событий в winforms с несколькими элементами управления

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

Разница между двумя? 1) В исполнении 2) В скорости 3) Мусор сбор

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

ответ

5

Создание их через конструктора точно такое же, как определение их в коде самостоятельно.

Что на самом деле происходит, они размещаются внутри метода InitializeComponent() в форме, которая обычно находится в файле designer.cs. Так оно и есть, это немного больше скрыто от разработчика.

Это означает, что ни производительность/скорость, ни вывоз мусора будет affeted в любом случае :)

0

Там нет никакой разницы в скорости исполнения или сбора мусора. Будете ли вы писать кнопку handler для события. OnClick + = MyHandler или вы дважды щелкните в дизайнере, и он генерирует это для вас, это точно так же.

Может быть разница в типе button.OnClick + = MyHandler и сгенерированная кнопка Visual Studio.OnClick + = new EventHandler (MyHandler). Поскольку есть конструктор. Но это лишь незначительная разница.

0

Для чего возникла разница? При двойном щелчке кнопки в дизайнере, чтобы создать обработчик событий, VS.NET будет генерировать код для прикрепления обработчика событий к событию Click. На самом деле сгенерированный код будет таким же, как и код, который вы напишете, чтобы прикрепить обработчик события к событию.

+0

Должен ли я отказаться от подписки на события, если я сам это сделаю? –

+1

При двойном щелчке в дизайнере код не генерируется для отмены подписки на события. –

2

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

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

foreach(Control ctrl in this.Controls) 
{ 
    if(ctrl is Button) 
    { 
     (ctrl as Button).Click += // generic Event handler 
    } 
} 

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

+0

спасибо за этот отзыв! – binball

Смежные вопросы