Обработка событий в winforms с несколькими элементами управления - PullRequest
2 голосов
/ 05 февраля 2010

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

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

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

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

Ответы [ 4 ]

5 голосов
/ 05 февраля 2010

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

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

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

2 голосов
/ 05 февраля 2010

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

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

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

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

0 голосов
/ 05 февраля 2010

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

0 голосов
/ 05 февраля 2010

Нет разницы в скорости работы или сборке мусора. Независимо от того, пишете ли вы кнопку «событие». OnClick + = MyHandler, или вы дважды щелкаете в конструкторе, и он генерирует это для вас, это одно и то же.

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

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