我有一个名为Meeting
的用户控件,位于P2
内的用户控件Form2
内。从Form1
开始,我在Update
中调用名为P2
的函数:
public void Update1()
{
meeting1.Visible = false;
}
因此,从表格1我使用:
P2 p = new P2();
p.Update();
它什么也没做。如果我直接使用P2
中的函数它可以工作,但如果我尝试从Form1使用它,它就不起作用。如果我在函数中添加MessageBox
,则MessageBox可以正常工作,但有关meeting
的代码却没有。
答案 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等。