c# - 如何将 lambda 表达式事件分配给另一个事件

标签 c# wpf events combobox textbox

我正在动态定义一个 wpf 窗口,其中包含一些以编程方式定义的文本框和复选框。 添加它们后,我想检查是否所有文本框和复选框都已填充。 为了对文本框执行此操作,我使用 lamda 表达式定义了事件:

var mw = new MyWindow();
mw.KeyDown += (senderEvent, args) =>
{
  cycle on all windows and when it's a TEXTBOX or a COMBOBOX analyze if it's empty or not.
  That is a lot of code which I wouldn't not replicate nor use an external routine
}

但是当组合框关闭时,如何关联要触发的相同代码? 最好的方法是将上面的代码更改为(伪代码):

mw.AllEvents += (senderEvent, args) =>{ ... }

mw.KeyDown && mw.ComboBoxClose += (senderEvent, args) =>{ ... }

但这没有意义,因为窗口没有comboboxclose事件

无论是这样还是在定义所有组合框时都能够执行以下操作:

newComboBox.ComboBoxClosed +=  (senderEvent, args) =>{ ...clone from mw.KeyDown }

提前谢谢

最佳答案

方法签名不同,因此您不能完全这样做。但是,您可以将所有 lambda 指向一个通用方法:

private void MyHandler()
{
    //bulk of the work
} 

//....
mw.KeyDown += (s,e) => MyHandler();
mw.ComboBoxClose += (s,e) => MyHandler();

如果您需要 EventArgs,您可以传递它并在 MyHandler 中对类型进行某种切换

关于c# - 如何将 lambda 表达式事件分配给另一个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35658506/

相关文章:

c# - 如果具有 runat ="server"属性,如何使 div 可拖动

c# - Asp.net 以声明方式添加控件。它们在哪里实例化?

c# - 如何在 .Net 2.0/C# 中将 StreamReader 转换为 XMLReader 对象

wpf - 水平或垂直 WPF 线限制为 125,000 像素?

c# 在 RelayCommand 中缺少 TapHandler

javascript - 动态创建的元素上的事件绑定(bind)?

c# - 捕获控制台退出 C#

c# - 更新对象的通用方法错误( Entity Framework 4)

wpf - 什么是网格几何?

jQuery 文档说 .submit() 事件在 IE 中不会冒泡。这是什么意思?