2012-04-27 73 views
0

我有一個簡單的按鈕,這將開闢AddStation表單訪問方法(該按鈕被放置在MainForm形式):從另一個類

var AddStation = new AddStation(); 
AddStation.Show(); 

它顯示了形式正常,但是表格AddStation具有保存按鈕。當按下此按鈕時,AddStation表單關閉,我想運行MainForm的類中的方法(以更新存在於MainForm上的列表框)。

由於表格AddStation沒有對MainForm的引用,因此我現在無法執行此操作,但我該怎麼做?如何從AddStation表單運行方法MainForm.UpdateListBox

回答

0

我相信這是Dunsten誰刪除了他的答案,但工作完美。

我在我的AddStation類的頂部添加

public MainForm mainForm; 

,然後調用我用這個表單時:

var AddStation = new AddStation(); 
AddStation.mainForm = this; 
AddStation.Show(); 

,現在我能夠從AddStation訪問方法/對象(我之後)!

3

您可以訂閱FormClosing上主:

AddStation.FormClosing += new FormClosingEventHandler(AddStation_FormClosing); 

,然後在主做類似:

void AddStation_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    UpdateListBox(); 
} 

這當然會,火災時的形式正在縮小。

編輯: 您也可以在AddStation宣佈自己的事件,並有主訂閱它:

在AddStation:

public event EventHandler TimeToUpdateListBox; 

,只要你認爲這是適當的(也許當按鈕關閉AddStation已被點擊):

if (TimeToUpdateListBox != null) 
    TimeToUpdateListBox(this, new EventArgs()); 

主要:

void AddStation_TimeToUpdateListBox(object sender, EventArgs e) 
{ 
    UpdateListBox(); 
} 
1

是否有一個原因,你使用的是一個變種,而不是實際的類對象?

通常我做的是做這樣的事情:

AddStation frmAddStation = new AddStation(); 
if (frmAddStation.ShowDialog() == DialogResult.OK) { 
    //<call your update listbox function here> 
} 

然後在從AddStation您保存按鈕調用的函數確保你這樣做:

this.DialogResult = DialogResult.OK; 

這樣做的好處是如果你的表單上有取消按鈕,如果你設置了

this.DialogResult = DialogResult.Cancel; 

然後你的代碼doe不執行ListBox更新。

+0

在方法範圍中,'var'是一個隱式類型的變量。使用'var'而不是'AddStation'是聲明類型的另一種方式,而不是「類對象」。 「類對象」是聲明右側聲明的內容。左側是「類型」。 [var(C#Reference)](http://msdn.microsoft.com/en-us/library/bb383973.aspx) – 2012-04-27 14:34:31

+0

除了少打字以外,爲什麼要使用var與顯式聲明強類型對象的類型?我理解爲什麼在構建LINQ語句時使用var,但不知道爲什麼你會在這裏使用var,這是更偏好的事情還是微軟推動開發人員使用這種語法? – milestogofromhere 2012-05-03 20:40:21

+1

已經詳細討論了'var'的使用。一個很好的討論:[在C#中使用var關鍵字](http://stackoverflow.com/q/41479/9664)。國際海事組織,一般的經驗法則是當右側顯式聲明類型時使用'var';否則,請使用該類型。 – 2012-05-03 22:07:48

0

將Save按鈕的對話結果設置爲DialogResult.OK。然後顯示第二種形式是這樣的:

using(var AddStation = new AddStation()) 
{ 
    if (AddStation.ShowDialog() == DialogResult.OK) 
     // update listbox 
}