我有两种形式,Form1和Form2。我在Form1的Form2上使用ShowDialog()。如何从Form2运行Form1Load()?具体来说,我想从Form2刷新Form1。
答案 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的实例并调用任何公共方法或访问任何公共属性。 (确保load事件处理程序是公共的)
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();
}