我怎样才能在 WinForms 中获得 MDI Child 的原始表单实例?

How could I get the original form instance of an MDI Child in WinForms?

我有一个 WinForms 应用程序,它可以将不同的表单作为 MDI 子项处理,并将它们作为选项卡打开。与打开每个表单的一个实例相关的所有事情实际上都得到了正确处理,但是当我抛出 "profile changing event".

时我遇到了问题

我想在关闭它之前访问每个 Child 实例的 属性,但我只是访问表单,而不是原始对象表单实例本身。

实际代码:

private void ProfileChanged()
{
     foreach (var child in this.MdiChildren)
     {
         child.Close();
     }
}

所需代码:

private void ProfileChanged()
{
     foreach (var child in this.MdiChildren)
     {
         child.Status ...
         child.Close();
     }
}

有什么想法吗?非常感谢。

您应该将 child 变量转换为您的自定义 Form 类型。我猜你有一个所有子窗体都继承的基本窗体,对吧?如果没有,你应该有一个基础 class.

之后的代码应该很简单:

private void ProfileChanged()
{
    //if you want to use Linq
    foreach (var child in this.MdiChildren.Cast<YourCustomBaseClass>)
    {
        child.Status ...
        child.Close();
    }
    //if you don't want to use Linq
    foreach (var child in this.MdiChildren)
    {
        var myCustomChild = child as YourCustomBaseClass;
        if (myCustomChild == null) continue; //if there are any casting problems
        myCustomChild.Status ...
        myCustomChild.Close();
    }

 }

您可以将 child 转换为 Formxxx... 其中 Formxxx 是每个表单的类型 示例:

public partial class Form1 : Form
{
    public int Status { get; set; }
    public Form1()
    {
        InitializeComponent();

    }

    private void ProfileChanged()
    {
        foreach (var child in this.MdiChildren)
        {
            if (child is Form1)
            {
            (child as Form1).Status = 1;
              child.Close();
            }
        }

    }
}