所以我有形式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