在循环中将事件添加到控件:对象引用未设置为对象的实例

Adding Event to Control in Loop: Object reference not set to an instance of an object

我的代码在运行时创建了多个表单。这些表单填充有从文本文件读取的多个控件。我还想做的是基于另一个文本文件为控件创建操作。

文本文件遵循此模板:

ActionToPerform=(control)(trigger)(settings)

我遇到的问题是这是在循环中发生的,因此事件侦听器似乎失去了作用域。通过在当前窗体上搜索与设置文件中名称相同的控件,可以找到放置事件的控件。

这是我的事件侦听器代码示例:

myForms[locali].Controls.Find(actionObject, false).FirstOrDefault().MouseDown += new MouseEventHandler(myForms[locali].SendEmail_Event);

但是我收到错误 'object reference not set to an instance of an object'。

如何重写代码以允许我使用文件中的设置将事件添加到正确的控件?

FirstOrDefault returns 可能为空。所以在使用之前检查它是否为空

var obj= myForms[locali].Controls.Find(actionObject, false).FirstOrDefault();
if(obj!=null){
    obj.MouseDown += new MouseEventHandler(myForms[locali].SendEmail_Event);
}