【发布时间】:2012-07-20 11:11:13
【问题描述】:
我正在尝试创建一个将用户控件添加到我的主窗体的函数。我希望用户控件本身也可以使用此功能,因此我将其设为静态。
我的问题是当它是静态的时我不能使用this.Controls.Add(ucontrol);,我试图将其更改为ActiveForm.Controls.Add(ucontrol);,但是 ActiveForm 为 NULL 并且没有 Controls 属性(引发异常)。
更新#1:我最终在用户控件中做了这样的事情:
MainForm ref_to_mainform_to_gain_access_to_functions = (MainForm)Parent;
ref_to_mainform_to_gain_access_to_functions.DisplayControl(ucontrol);
也许它会更好,但我仍然认为可以从静态方法访问主窗体?
更新 #2:
Application.OpenForms["FormName"]
从静态方法工作。
我仍然试图找出用户控件的全部目的是否用作带有按钮的菜单,在点击时显示其他用户控件,在 mainform 上调用函数(显示用户控件的函数)是否仍然是“设计犯罪”用户控件? (就像我在“更新 #1”中所做的那样)
【问题讨论】:
-
这是 Winforms 提醒您做错了的方式之一。用户控件应该从不向其父级添加控件。引发事件。
-
@HansPassant - 你能解释一下为什么错了吗?
标签: winforms user-controls this static-methods