从另一个表单隐藏usercontrol中的usercontrol

时间:2017-04-25 19:35:39

标签: c# forms winforms

我有一个名为Meeting的用户控件,位于P2内的用户控件Form2内。从Form1开始,我在Update中调用名为P2的函数:

public void Update1()
{
    meeting1.Visible = false;
}

因此,从表格1我使用:

    P2 p = new P2();
    p.Update();

它什么也没做。如果我直接使用P2中的函数它可以工作,但如果我尝试从Form1使用它,它就不起作用。如果我在函数中添加MessageBox,则MessageBox可以正常工作,但有关meeting的代码却没有。

1 个答案:

答案 0 :(得分:0)

这就是我要做的事情:给会议一个UpdateButtonAction财产。我们会假装它从未听说过P2,因为依赖或其他东西。

public Action UpdateButtonAction { get; set; }

在P2的构造函数结束时,将其赋值给它。

this.meeting1.UpdateButtonAction = () => this.Update();

然后我们也给Form1一个相同的属性:

public Action UpdateButtonAction { get; set; }

我们有两个action属性的副本,因为我假设你还没有创建Form1的实例。如果你有,那就简化了事情。

我不知道Form1何时尝试这样做;它听起来像一个更新按钮的东西,但我们可以改变,如果我猜错了。

因此,当Meeting创建Form1时,它会传递其父UpdateButtonAction提供的P2操作。这段代码在Meeting的某个地方(我猜它是如何创建Form1的,让我知道这是不是很适合你真正做的事情):

var form1 = new Form1();

form1.UpdateButtonAction = this.UpdateButtonAction;

//  Or whatever
form1.ShowDialog();

Form1可以随意调用该操作。这一行将调用在P2的构造函数中分配的Action lambda。

this.UpdateButtonAction?.Invoke();

您也可以以同样的方式传递对P2的引用,但这更好,因为OOP等。