如何从静态方法(在winforms中)添加usercontrols?
我正在尝试创建一个函数,将usercontrols添加到我的mainform中。我希望这个函数也可以从usercontrols本身获得,所以我将它设置为静态 我的问题是,当它是静态的时,我不能使用如何从静态方法(在winforms中)添加usercontrols?,winforms,user-controls,this,static-methods,Winforms,User Controls,This,Static Methods,我正在尝试创建一个函数,将usercontrols添加到我的mainform中。我希望这个函数也可以从usercontrols本身获得,所以我将它设置为静态 我的问题是,当它是静态的时,我不能使用this.Controls.Add(ucontrol),我试图将其更改为ActiveForm.Controls.Add(ucontrol)但是ActiveForm为NULL并且没有控件属性(抛出异常) 更新#1:我最终在用户控件中执行了类似的操作: MainForm ref_to_mainform_to
this.Controls.Add(ucontrol)
,我试图将其更改为ActiveForm.Controls.Add(ucontrol)
但是ActiveForm为NULL并且没有控件属性(抛出异常)
更新#1:我最终在用户控件中执行了类似的操作:
MainForm ref_to_mainform_to_gain_access_to_functions = (MainForm)Parent;
ref_to_mainform_to_gain_access_to_functions.DisplayControl(ucontrol);
也许更好,但我仍然认为可以从静态方法访问mainform
更新#2:
Application.OpenForms["FormName"]
从静态方法工作
我仍在试图找出,如果usercontrol的全部用途是作为一个菜单,在单击时显示其他usercontrol的按钮,那么从用户控件调用mainform上的函数(显示usercontrol的函数)仍然是“设计犯罪”吗?(就像我在“更新#1”中所做的那样)通过将控件从用户控件添加到其父控件,您打破了关注点分离原则,并且将两个控件/表单紧密耦合。正如Hans Passant所建议的,您应该使用事件。请参阅:
这是Winforms提醒您做错事的一种方式。用户控件永远不应该向其父控件添加控件。引发一个事件。@HansPassant-你能解释一下为什么它错了吗?如果usercontrol的全部目的是作为一个菜单,在单击时显示其他usercontrols,那么从用户控件调用mainform上的函数(显示usercontrols的函数)仍然是“设计犯罪”吗?(就像我在《更新1》中那样)是的。您所做的是将两个控件紧密耦合。这意味着两个控件都不能单独使用,只能一起使用。您可以很好地将这两个控件合并到一个控件中,结果将是相同的。互联网上有很多关于创建松散耦合组件和分离关注点的好材料。我强烈建议你做一些研究,调查这些概念。