使用 lambda 进行 winforms 事件有什么问题吗?

发布于 2024-10-05 18:41:43 字数 212 浏览 0 评论 0原文

这是一个非常简单的问题。我之所以这么问,是因为我以前从未见过它,这让我怀疑是否有什么问题。

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

This is a very simple question. I'm asking because I've never seen it before which makes me wonder if there's something wrong.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

野生奥特曼 2024-10-12 18:41:43

这是完全可以接受的,但是,由于这些是匿名委托,因此无法取消订阅事件处理程序。

也就是说:

// 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(); 

这是否是一个问题取决于您的应用和使用。

This is perfectly acceptable, however, since these are anonymous delegates, there is no way to unsubscribe the event handler.

That is:

// 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(); 

Whether that is a problem or not depends on your application and use.

放手` 2024-10-12 18:41:43

没关系;唯一微妙的一点是您是否需要取消订阅;那么您也需要在本地存储委托:

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

请注意,如果我不使用任一参数(sender/args),我更喜欢匿名方法语法:

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

因为这不会将任何额外(不必要的)变量引入范围。

It is fine; the only subtle point is if you need to unsubscribe it; then you need to store the delegate locally too:

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

Note that if I'm not using either parameter (sender/args) I prefer the anon method syntax:

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

As this doesn't introduce any extra (unnecessary) variables into scope.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文