所以我有形式Foo,并形式酒吧。假设我已经创建了一个Bar对象,将其初始化并显示它:如何等待一个单独的表单按钮事件
Bar b = new Bar();
b.Show();
Bar有一个按钮。我需要使用一个事件,当它被推送时,会触发Foo中的一些代码。我不能在Bar中创建一个Foo的新对象,因为已经有活动变量等等。
任何想法?编辑: 一个更简单的方法来做到这一点,将停止b.Show()后的代码,然后等待被调用的窗口执行this.Close();有没有办法做到这一点?
所以我有形式Foo,并形式酒吧。假设我已经创建了一个Bar对象,将其初始化并显示它:如何等待一个单独的表单按钮事件
Bar b = new Bar();
b.Show();
Bar有一个按钮。我需要使用一个事件,当它被推送时,会触发Foo中的一些代码。我不能在Bar中创建一个Foo的新对象,因为已经有活动变量等等。
任何想法?编辑: 一个更简单的方法来做到这一点,将停止b.Show()后的代码,然后等待被调用的窗口执行this.Close();有没有办法做到这一点?
既然你mentioned in comments的Bar
是当按钮被点击,你可以简单地使用现有的FormClosed
事件,而不是定义自己正在被封闭的形式:
Bar b = new Bar();
b.Show();
b.FormClosed += (s, args) => DoStuff();
如果你想要做一些动作时单击该按钮时,它并没有这样发生的形式在同一时间被关闭,那么你可以定义Bar
自定义事件,它可以像这样做:
public class Bar
{
public event Action MyButtonClicked;
}
再火令事件单击按钮时:
public void buttonClicked(object sender, EventArgs args)
{
if(MyButtonClicked != null) MyButtonClicked();
}
然后Foo
可以订阅事件:
Bar b = new Bar();
b.Show();
b.MyButtonClicked +=() => DoStuff();
甜,感谢的人。我结束了使用FormClosed函数,因为我甚至不知道存在!谢谢你,谢谢你,谢谢你! – amartin94
您可以使用组成
public class Bar
{
private Foo f;
public Bar(Foo value)
{
f = value;
}
}
Foo f = new Foo();
Bar b = new Bar(f);
在酒吧您的活动,请拨打f.Method()
在Bar
声明一个新的事件:
public event EventHandler SomethingHappened;
private void OnSomethingHappened()
{
var handler = SomethingHappened;
if (handler != null)
handler(this, EventArgs.Empty);
}
而在该事件处理程序触发它按钮:
private void TheButton_Click(object sender, EventArgs e)
{
OnSomethingHappened();
}
在Foo
,订阅事件:
Bar b = new Bar();
b.SomethingHappened += Bar_SomethingHappened;
b.Show();
...
void Bar_SomethingHappened(object sender, EventArgs e)
{
// Do whatever you need to do...
}
这种方法比传球Foo
一个实例Bar
更好,因为这样一来Bar
不必知道Foo
任何东西,所以它减少耦合。此外,您可以更容易地从其他表单重复使用Bar
。
+1为highlighing'因此它减少耦合'+'你可以更容易地重用Bar'。 – Abhinav
传递给'Bar' – Marc
我将如何做到这一点'Foo'的实例?创建一个内部Foo对象,然后将它作为参数? – amartin94
你的问题是不完整的..你想要做什么..你从哪里调用显示'酒吧'.. – Anirudha