【发布时间】:2014-06-21 15:05:21
【问题描述】:
我在调用另一个类的方法时遇到问题。 Form1.cs 包含:
public void RefreshTreeview()
{
MessageBox.Show("test");
this.treeView1.Nodes.Clear();
this.textBox10.Text = "test";
}
当我尝试从另一个类“Form2.cs”调用此方法时:
public void button2_Click(object sender, EventArgs e)
{
Form1 Obj = new Form1();
Obj.RefreshTreeview();
this.Close();
}
我只收到带有文本的消息框。 Treeview 没有“清除”,textBox10 没有进行“测试”。但是,当我尝试从 Form1 中的方法调用相同的方法时,所有元素都已执行:
private void toolStripButton1_Click(object sender, EventArgs e)
{
RefreshTreeview();
}
当然,这两个课程都是公开的。请帮忙。 问候
【问题讨论】:
-
您正在创建 Form1 的新实例。这个实例有它自己的树视图和文本框。您正在查看的 Form1 实例不受您的代码影响。因为您没有调用 Obj.Show,所以此实例无法在您编写单词“Test”的位置显示其自己的文本框。相反,当您从第一个 Form1 实例调用该方法时,一切都按预期工作,因为该方法适用于第一个实例拥有的树视图和文本框
-
这可能是重复的。看看this
-
在 form2 ctor 中获取 form1 实例,当然你必须在 form2 中拥有一个 form1 类型的私有字段并在 ctor 中分配它,然后在你的 button2 点击处理程序中使用该字段。或者只是在你的 button2 点击处理程序中地方 - Form1 f = (Form1)Application.OpenForms["Form1"];