簡體   English   中英

如何正確使用C#Visual Studio 2010中另一個類中的一個類的方法

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

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