Что-то не так с использованием лямбды для события winforms? - PullRequest
3 голосов
/ 05 декабря 2010

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

comboBox1.MouseEnter += (a, b) => comboBox1.Focus();
campaignDataGridView.MouseEnter += (a, b) => campaignDataGridView.Focus();

Ответы [ 2 ]

9 голосов
/ 05 декабря 2010

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

То есть:

// Subscribe lambda as event handler
comboBox1.MouseEnter += (a, b) => comboBox1.Focus(); 

// Try to unsubscribe a _different_ lambda with identical syntax. 
// The first lambda is still subscribed
comboBox1.MouseEnter -= (a, b) => comboBox1.Focus(); 

Является ли это проблемой илине зависит от вашего приложения и использования.

5 голосов
/ 05 декабря 2010

Это нормально;единственный тонкий момент, если вам нужно отписаться от него;тогда вам также необходимо сохранить делегат локально:

EventHandler handler = (s,a) => ...
obj.SomeEvent += handler;
...
obj.SomeEvent -= handler;

Обратите внимание, что если я не использую ни один из параметров (отправитель / аргументы), я предпочитаю синтаксис метода anon:

obj.SomeEvent += delegate {...};

Поскольку это не вводит никаких дополнительных (ненужных) переменных в область видимости.

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