簡體   English   中英

從另一個類訪問方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM