如何从另一个表单重新加载表单

时间:2015-10-21 17:23:51

标签: c#

我有两种形式,Form1和Form2。我在Form1的Form2上使用ShowDialog()。如何从Form2运行Form1Load()?具体来说,我想从Form2刷新Form1。

3 个答案:

答案 0 :(得分:1)

创建Form1的实例,然后对该实例使用Refresh方法或Form1_Load方法。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public void ShowMessage(string message)
    {
        MessageLabel.Text = message;
    }

    private void ShowForm2(object sender, EventArgs e)
    {
        Form2 Form2Copy = new Form2(this);
        Form2Copy.ShowDialog();
    }

}

public partial class Form2 : Form
{
    Form1 Form1Copy;

    public Form2(Form1 Parent)
    {
        InitializeComponent();
        Form1Copy = Parent;
    }

    public void Button_Click(Object sender, EventArgs e)
    {             
        Form1Copy.ShowMessage("Hello from Form2!");
    }
}

答案 1 :(得分:1)

首先,确保在显示之前在Form2上分配Owner属性。这允许您访问Form1的当前实例。

class Form1 : Form
{
    public void Method()
    {
       var form2 = new Form2();
       form2.Owner = this;
       form2.ShowDialog();
    }
}

从Form2,您可以使用this.Owner访问Form1的实例并调用任何公共方法或访问任何公共属性。 (确保loa​​d事件处理程序是公共的)

class Form2 : Form
{
    public void Method()
    {
       this.Owner.form1_Load(null,null); //assuming you don't use these params.
    }
}

在你的form1_Load()中,我建议使用this.Refresh()来“刷新”表单。刷新不会更新存储数据的某些内容,只会重新绘制表单,因此在加载事件中您必须手动“刷新”内容。

答案 2 :(得分:0)

将Form1传递给Form2实例的ShowDialog()方法:

    private void Form1_Load(object sender, EventArgs e)
    {
        this.LoadEventCode();
    }

    public void LoadEventCode()
    {
        this.Text = DateTime.Now.ToString();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.ShowDialog(this); // <-- pass in Form1
    }

现在在Form2中,将.Owner属性转换为Form1并执行您需要的操作:

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 f1 = (Form1)this.Owner;
        f1.LoadEventCode();
    }