我有动态加载(并销毁)不同类型的用户控件到需要的表单上的代码。用户控件使用其父级的属性将某些值加载到控件中,如文本框和复选框。问题是,在该行:从孩子访问ParentForm并确保添加孩子
activeControl = new userControl1(params...);
我的构造函数显然会尝试还不存在装载场(它们属于父窗体),因为它没有被添加到父窗体,直到在userControl1创建后。
我试着用用户控件的ParentChanged事件来解决这个问题,所以它在加载字段之前一直等到它的父对象被设置。这里的问题是,当我销毁userControl1并创建一个userControl2时,父级更改并尝试从null ParentForm(我原本的确切问题)中加载字段。
是否有解决此问题的首选方法?显然,我可以添加类似
if(this.ParentForm == null) { return; }
到ParentChanged事件或类似的规定。但是,这感觉既优雅也不安全。我俯瞰一些事件或完成这一首选方式?
经常在事件检查null是一个好主意(不错的想法)。在InitializeComponent()事件触发期间,必须被忽略。这些假事件期间列表框和组合框的行索引为-1,并且在事件处理程序中检查索引> = 0是正常的。 – jdweng
你从“ParentForm”访问的实际内容是什么?如果您将'ParentForm'强制转换为其他子类型,通常在用户控件内部访问父表单并不是一个好主意。 –