繁体   English   中英

在另一种形式的用户控件中隐藏用户控件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM