[英]How can I properly use methods from a class in another class in C# Visual Studio 2010
因此,我有一個帶有公共void LoadTree()方法的Form2(它將來自數據庫的數據加載到Form2中的TreeView上),還有一個Form3,它從Form2上單擊按鈕就開始了。 在Form3上的按鈕上單擊(在執行某些代碼之后),我想使用Form2中的LoadTree()方法。
我在Form3中具有以下代碼來執行此操作:
private void button1_Click(object sender, EventArgs e)
{
var loading = new Form2();
loading.LoadTree();
loading.Show();
}
一切正常,執行良好,沒有錯誤,但是最后我有一個Form2,一個Form3和另一個Form2,如果我嘗試放置一個代碼以關閉第一個Form2,則整個程序都關閉了,我該怎么辦關於它?,我只希望在單擊Form3上的按鈕后,Form2顯示為已更新。
問題:您每次都在創建Form2
的新實例 (或您要顯示的任何Form),以便它每次都創建一個新實例,並且所有舊更改將不可用。
解決方案:不要創建在不同的Forms之間切換時隱藏的Forms
的新實例,而是使用Application.OpenForms[]
從內存中打開已經存在的Form2
。
嘗試這個:
Form2 form2 = (Form2) Application.OpenForms["Form2"];
//now use form2 variable
form2.LoadTree();
form2.Show();
我有一個帶有方法public void LoadTree()的Form2(該方法將數據庫中的數據加載到Form2中的TreeView上)
不要直接以表格形式進行數據庫調用。 將此代碼放在另一個類中,最好使用n層。
在Form3上的按鈕上單擊(在執行某些代碼之后),我想使用Form2中的LoadTree()方法。
和
我只是想在單擊Form3上的按鈕后,將Form2顯示為已更新。
Form3引發由Form2處理的事件。 最佳實踐是使用事件在表單之間傳遞消息。 您可以在此處使用屬性,但這將是屬性的副作用,因此不是實現目標的好方法。
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void LoadTree(Object o, EventArgs e)
{
//do work
MessageBox.Show("Loading tree...");
}
private void button1_Click(object sender, EventArgs e)
{
var form = new Form3();
form.LoadTreeEvent += form_LoadTreeEvent;//Hook into the Form3 event
form.Show();
}
void form_LoadTreeEvent(object o, EventArgs e)
{
LoadTree(o, e);//Handle Form3 Event
}
}
public partial class Form3 : Form
{
//The event is raised by Form3, however it's handled by Form2.
public event LoadTreeHandler LoadTreeEvent;
public delegate void LoadTreeHandler(Object o, EventArgs e);
public Form3()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
LoadTreeEvent(null, null);//Raise the event in Form3 and pass whatever
//do work...maybe close this form??
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.