在第二次编辑后刷新表单

时间:2016-07-19 13:38:40

标签: c# forms refresh

嘿大家我正在尝试刷新表单,一旦更改完成一秒钟。在我的第一个表单上,我按下“创建”按钮,将打开另一个表单,form2。第二个表单将具有输入字段,并允许您输入在第一个表单上填充组合框的值。在第二个表单上有一个按钮“更新”我想在第一个按下更新后刷新第一个表单。

我知道有this.refresh();,但我不确定这对我有用。我正在尝试以下方面:

在form2上 -

Private void Form2UpdateButton_Click
{
  //do update stuff
  Form1_load.Refresh();
}

或者

private void Form2UpdateButton_Click
    {
    //do update stuff
    Form1.close();
    Form1.Open();
    }

我仍然是C#的新手并且将2种形式互动在一起对我来说是一个相当复杂的概念,所以如果我以错误的方式解决这个问题,请告诉我。我的刷新可能在错误的位置,但我认为这就是我想要的。

3 个答案:

答案 0 :(得分:0)

在form2上创建一个自己的事件,在单击该按钮时触发该事件。这样你就可以form2.OnUpdateClicked += yourMethod。像这样:

public partial class Form1 : Form
{
    private void CreateForm2()
    {
        Form2 frm2 = new Form2();
        // Hook the event of form2 to a method
        frm2.PropertyUpdated += Form2Updated;
    }

    private void Form2Updated(object sender, EventArgs e)
    {
        // this will be fired
    }
}

public partial class Form2 : Form
{
    // On form2 create an event
    public event EventHandler PropertyUpdated;

    private void Form2UpdateButton_Click()
    {
        // If not null (e.g. it is hooked somewhere -> raise the event
        if(PropertyUpdated != null)
            PropertyUpdated(this, null);
    }
}

答案 1 :(得分:0)

建议:

您的第二个表单应该通过引用第一个表单来创建,即

Form1中:

public void RefreshParameters()
{
  // ... do your update magic here
}

private void openForm2(..)
{
   // Pass your current form instance (this) to new form2
   var aForm = new Form2(this);
   aForm.Show(); // show, run, I don't remember... you have it
}

窗体2:

// Here you will store a reference to your form1
form1 daddy = null;

// A new constructor overloading default one to pass form1
public Fomr2(Form1 frm):base()
{
  daddy = frm; // Here you store a reference to form1!
}

public void UpdateDaddy()
{
  // And here you can call any public function on form1!
  frm.RefreshParameters();
}

答案 2 :(得分:0)

一种方法是将Form1的引用传递给Form2,如下所示:

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

    private void buttonLaunchForm_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2();
        form2.LauncherForm = this;

        form2.Show();
    }

    public void RefreshFormData()
    {
         // Refresh
    }
}

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

    public Form1 LauncherForm { set; get; }

    private void buttonUpdate_Click(object sender, EventArgs e)
    {
        // do your normal work then:

        LauncherForm.RefreshFormData();
    }
}

上述技术称为" Property-Injection" ;