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