首页 > 解决方案 > 如何找到打开当前打开的表单的表单?(C#,WinForms)

问题描述

所以我基本上有一个打开的表格,我需要检查什么表格叫那个打开

“父窗体”

    private void btnEnter_Click(object sender, EventArgs e)
    {
        this.Close();
        newForm nf = new newForm();
        nf.Show()
    }

“打开的表格”

    private void newForm_Load(object sender, EventArgs e)
    {
        if parent is ("oldForm") // Need to know how to code for this line.
        {
           //do some stuff here 
        }

        else
        {
           //Do something different
        }
    }

因此,例如,如果 oldForm 是调用这个表单的表单,那么会发生一些特定的事情,如果“anotherForm”调用它就不会发生

标签: c#winforms

解决方案


您可以在表单中添加一个“父”属性,并在调用 Show 之前设置它。

private void btnEnter_Click(object sender, EventArgs e)
{
    this.Close();
    newForm nf = new newForm();
    nf.Parent = this;
    nf.Show()
}

您的表单将如下所示:

public class MyForm
{
    public Form Parent {get;set;} 

    private void newForm_Load(object sender, EventArgs e)
    {
        if (this.Parent is oldForm) 
        {
           //do some stuff here 
        }
        else
        {
           //Do something different
        }
    }
}

请注意,这if (this.Parent is oldForm)相当于if (this.Parent.GetType() == typeof(oldForm))

正如其中一条评论所说,如果您仅使用 Parent 属性来做出这一决定,则最好将其定义为布尔属性,称为DoSomething指示它的作用。将此与其他建议相结合给出:

public class MyForm
{
    private bool specialMode;

    public MyForm(bool mode)
    { 
        this.specialMode = mode;
    }

    private void newForm_Load(object sender, EventArgs e)
    {
        if (this.specialMode) 
        {
           //do some stuff here 
        }
        else
        {
           //Do something different
        }
    }
}

你会这样称呼它:

private void btnEnter_Click(object sender, EventArgs e)
{
    this.Close();
    newForm nf = new newForm(true); // SpecialMode = ON
    nf.Show()
}

推荐阅读