无法从不同的Form调用所有方法

时间:2014-06-21 15:05:22

标签: c# winforms methods

我从另一个类调用方法时遇到问题。 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();
}

当然这两个课程都是公开的。请帮忙。 此致

2 个答案:

答案 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();
}