[英]Accessing method from another class
我有一個簡單的按鈕,它將打開AddStation
表單(此按鈕位於MainForm
表單上):
var AddStation = new AddStation();
AddStation.Show();
它顯示形式很好,但是形式AddStation
有一個保存按鈕。 當按下此按鈕時, AddStation
表單關閉, 但是我想運行MainForm
類中的方法(以更新MainForm
上存在的列表框)。
這是我現在無法做到的方式,因為AddStation
表單沒有對MainForm
的引用,但是我該怎么做呢? 如何從AddStation
表單運行方法MainForm.UpdateListBox
?
您可以在Main上訂閱FormClosing
:
AddStation.FormClosing += new FormClosingEventHandler(AddStation_FormClosing);
然后在Main上執行以下操作:
void AddStation_FormClosing(object sender, FormClosingEventArgs e)
{
UpdateListBox ();
}
當然,這將在窗體關閉時觸發。
編輯:您還可以在AddStation
上聲明自己的事件,並讓Main訂閱它:
在AddStation上:
public event EventHandler TimeToUpdateListBox;
並在您認為合適時(也許在單擊關閉AddStation的按鈕時):
if (TimeToUpdateListBox != null)
TimeToUpdateListBox(this, new EventArgs());
在主要:
void AddStation_TimeToUpdateListBox(object sender, EventArgs e)
{
UpdateListBox ();
}
您是否有理由將var用於AddStation而不是實際的類對象?
通常我要做的是這樣的事情:
AddStation frmAddStation = new AddStation();
if (frmAddStation.ShowDialog() == DialogResult.OK) {
//<call your update listbox function here>
}
然后在從AddStation上的“保存”按鈕調用的函數中,確保執行以下操作:
this.DialogResult = DialogResult.OK;
這樣做的好處是,如果您在表單上設置了取消按鈕,
this.DialogResult = DialogResult.Cancel;
然后,您的代碼將不會執行ListBox更新。
將“保存”按鈕的DialogResult.OK
設置為DialogResult.OK
。 然后以這種方式顯示第二種形式:
using(var AddStation = new AddStation())
{
if (AddStation.ShowDialog() == DialogResult.OK)
// update listbox
}
您可以使用重載的Show mthod並將主窗體作為所有者傳遞,然后在主窗體上調用適當的方法-http: //msdn.microsoft.com/zh-cn/library/szcefbbd.aspx
我相信是鄧斯頓刪除了他的答案,但是效果很好。
我加了
public MainForm mainForm;
在我的AddStation
類的頂部,然后在調用表單時使用了此命令:
var AddStation = new AddStation();
AddStation.mainForm = this;
AddStation.Show();
現在,我可以從AddStation
訪問方法/對象了(后來我使用了)!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.