我从另一个类调用方法时遇到问题。 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();
}
当然这两个课程都是公开的。请帮忙。 此致
答案 0 :(得分:2)
我建议检索相同的Form1
实例,这可能是您在屏幕上实际看到的实例。
public void button2_Click(object sender, EventArgs e)
{
Form1 Obj = // retrieve instead of create a new one
Obj.RefreshTreeview();
this.Close();
}
要检索Form1
实例,有多种方法请在需要时发表评论。
答案 1 :(得分:1)
如果要创建Form1
的新实例,然后清除它,则必须使用Show()
方法。 E.g:
public void button2_Click(object sender, EventArgs e)
{
Form1 f = new Form1();
f.RefreshTreeview();
f.Show();
}
但我认为你的目标是清除现有的形式。最简单的方法是通知Form2
谁是其所有者。然后,您可以从Form2
访问所有者。
因此,在您使用Form2
中调用Form1
的方法中,而不是使用Show()
方法使用Show(this)
- 这样您就可以将当前实例作为新对话框的所有者传递。
Form1
中的代码,您调用Form2
:
Form2 f2 = new Form2();
f2.Show(this); // Current window is now the owner of the Form2
现在在Form2
,您可以访问Form1
,删除Nodes
并设置文字:
private void button1_Click(object sender, EventArgs e)
{
if (this.Owner == null) return; // Sanity check if there is no owner.
Form1 f = (Form1)this.Owner; // Get the current instance of the owner.
f.RefreshTreeview();
f.Show();
}