在循环中将事件添加到控件:对象引用未设置为对象的实例
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);
}
我的代码在运行时创建了多个表单。这些表单填充有从文本文件读取的多个控件。我还想做的是基于另一个文本文件为控件创建操作。
文本文件遵循此模板:
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);
}