C# 从子窗体重新加载MDI父窗体

C# 从子窗体重新加载MDI父窗体,c#,winforms,C#,Winforms,我需要在我的一个子窗体事件中重新加载Mdi父窗体 我使用了下面的代码,但它不工作 //Child form even private void btnChange_Click(object sender, EventArgs e) { this.ParentForm.Refresh(); } 有什么解决方案请任何人向我建议。1)您必须确保MDI父窗体的属性IsMdiContainer设置为true 2) 必须确保将子窗体的mdipradent属性设置为父窗体: ChildForm c

我需要在我的一个子窗体事件中重新加载Mdi父窗体

我使用了下面的代码,但它不工作

//Child form even
private void btnChange_Click(object sender, EventArgs e)
{
     this.ParentForm.Refresh();
}
有什么解决方案请任何人向我建议。

1)您必须确保MDI父窗体的属性
IsMdiContainer
设置为
true

2) 必须确保将子窗体的
mdipradent
属性设置为父窗体:

ChildForm child = new ChildForm();
child.MdiParent = this;
child.Show();
3) 然后,您可以使用
mdipradent
属性从子级访问MDI父级:

this.MdiParent.Refresh(); // or this.MdiParent.Invalidate();

在父窗体中使用以下代码重新绘制UI

this.Controls.Clear();

this.InitializeComponent();

如果您只想执行父窗体的
Load
事件主体,那么应该以允许多次调用代码的方式重新设计类

例如,假设您有一个名为
Form1
的表单

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

    private void Form1_Load(object sender, EventArgs e)
    {
        InitializeFormData();
    }

    public void InitializeFormData()
    {
        // do the initialization
    }
}
现在,您可以在任何子窗体上轻松调用
InitializeFormData
方法:

((Form1)this.MdiParent).InitializeFormData();

但是它不起作用-你有异常吗?@AlexFilipovici没有异常,但它没有重新加载。你试过使用
MdiParent
属性而不是
ParentForm
?@JohnWillemse我怎么做?你说的“重新加载”是什么意思?如果要重置所有控件的状态,必须手动执行。如果要引发
Load
事件,则不能。描述你的确切需求。它仍然不起作用,我需要调用MDI的加载事件。我曾经遇到过类似的问题,我重新绘制了UI,它为我工作。在提出建议之前,你最好了解后果。您的建议在某些情况下可能有效,但在大多数情况下不起作用(并且破坏了表单)。当然,这不是解决任何问题的正确方法。我不认为,这会毁掉这里的一切。别傻了,和蔼可亲,让stackoverflow成为更好的互相帮助的地方。如果我惹恼了你,谢谢你。我不是故意的。我只是想“让stackoverflow成为一个更好的地方”。总有比你说的更好的方法。这是我的意见。