通常我通过
获得
控制的父级名称
MessageBox.Show(control_Name.Parent.Name);
但是现在我们正在寻找表单的 Parent,所以我们不能使用相同的方法,因为我们甚至不需要真正的 Parent 和 Client 关系来调用表单。所以当我们这样做时我们会有 NullReferenceException
MessageBox.Show(this.Parent.Name);
在 Form3 中。
通过在 Form 1 和 Form2 和 Form3 中执行这些操作,我可以从两个表单中调用 Form3。
表格1
Form3 frm3;
public Form1()
{
InitializeComponent();
frm3 = new Form3(this);
}
private void button1_Click(object sender, EventArgs e)
{
frm3.Show();
}
表格2
Form3 frm3;
public Form2()
{
InitializeComponent();
frm3 = new Form3(this);
}
private void button1_Click(object sender, EventArgs e)
{
frm3.Show();
}
Form3
public Form3(Form parent)
{
InitializeComponent();
}
作为我的结论,如果父窗体只能有一个,那么Form1和Form2都是不是 Form3父窗体,因为其中一个不存在,但另一个仍然可以调用Form3。如果父窗体可以有多个,那么我认为Form1和Form2都是Form3的父窗体。
顺便说一下,如果Parent Form最小化了,Child Form也被最小化了,那么我们可以将Form1设为Form3的Parent Form(或者实际上是owner form)
表格1
Form3 frm3;
public Form1()
{
InitializeComponent();
frm3 = new Form3(this);
this.AddOwnedForm(frm3);
}
或
我们将 Form3 的 owner 设置为 调用它的表单
Form3
public Form3(Form parent)
{
InitializeComponent();
this.Owner = parent;
}
如果你不同意我的观点,请给我明确的定义父表格和子表格。谢谢。我试着从我的角度来解释,如果我错了,希望有人纠正我。