繁体   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