0

我正在尝试创建一个将用户控件添加到我的主窗体的函数。我希望用户控件本身也可以使用此功能,因此我将其设为静态。

我的问题是,当它是静态的我不能使用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”中所做的那样)

4

1 回答 1

1

通过将用户控件中的控件添加到其父控件,您打破了关注点分离原则,并且紧密耦合了两个控件/表单。正如 Hans Passant 所建议的,您应该使用事件。请参考: c#中调用父窗体中的方法和访问父窗体中的gui元素的最佳实践

于 2012-07-20T16:44:09.993 回答