[英]Hide a usercontrol in a usercontrol from another form
我有一个名为Meeting
的用户控件,它位于Form2
的用户控件P2
。 在Form1
我在P2
调用了一个名为Update
的函数:
public void Update1()
{
meeting1.Visible = false;
}
所以从表格1我使用:
P2 p = new P2();
p.Update();
它什么也没做。 如果我直接使用P2
的功能,则可以使用,但是如果我尝试使用Form1中的功能,则无法使用。 如果我在函数内添加一个MessageBox
,则MessageBox可以工作,但有关meeting
代码却不能。
我将执行以下操作:给Meeting提供一个UpdateButtonAction
属性。 我们会假装它从未听说过P2,因为依赖项或其他原因。
public Action UpdateButtonAction { get; set; }
在P2的构造函数的末尾,将其分配给它。
this.meeting1.UpdateButtonAction = () => this.Update();
然后我们还给Form1一个相同的属性:
public Action UpdateButtonAction { get; set; }
我们有action属性的两个副本,因为我假设此时您尚未创建Form1的实例。 如果您有,那将简化事情。
我不知道Form1何时尝试执行此操作。 听起来像是更新按钮,但如果我猜错了,我们可以更改它。
因此,当Meeting
创建Form1时,它将传递其父级P2
赋予它的UpdateButtonAction
操作。 这段代码在Meeting中的某处(我猜它是如何创建Form1的,让我知道这是否不能很好地适应您的实际工作):
var form1 = new Form1();
form1.UpdateButtonAction = this.UpdateButtonAction;
// Or whatever
form1.ShowDialog();
Form1可以随意调用该动作。 该行将调用在P2
的构造函数中分配的Action lambda。
this.UpdateButtonAction?.Invoke();
您也可以以相同的方式传递对P2
的引用,但这更好,因为OOP等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.