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

时间:2015-06-09 09:22:21

标签: c# winforms events eventhandler

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

文本文件遵循以下模板:

ActionToPerform=(control)(trigger)(settings)

我遇到的问题是这发生在一个循环中,因此事件监听器似乎失去了范围。通过在当前表单上搜索与设置文件中的名称相同的控件来找到启用事件的控件。

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

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

但我得到错误'对象引用没有设置为对象的实例'。

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

1 个答案:

答案 0 :(得分:1)

FirstOrDefault可能返回null。因此在使用它之前检查它是否为空

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