从一个子窗体打开另一个子窗体并将 MDI 设置为父窗体 - 如何操作?

13

我有一个 MDI 表单,在这个 MDI 表单中,我可以使用以下代码打开一些子窗体:

这是在 MainForm 中实现的。

Form1 f1 = new Form1;
f1.MdiParent = this; //this refers to MainForm (parent)
f1.Show();

这个可以正常工作!

但是现在,当我在子窗体中(Form1 -> f1)时,我想打开另一个窗体作为MainForm的子窗体,但是当我使用this关键字时,它将引用f1。如何在f1中打开新窗体并将其MdiParent设置为MainForm


1
你可能可以使用这个.MdiParent。通常最好让父窗口创建子窗口。使用事件来告诉它采取行动。 - Hans Passant
5个回答

42
尝试将你的第一个子元素的父表单赋值为:
Form2 f2 = new Form2;
f2.MdiParent = this.ParentForm; //this refers to f1's parent, the MainForm
f2.Show();

希望能对你有所帮助。


12

假设第二个表单为f2。那么,在MDI父窗体中创建一个新表单f2的f1表单中的代码将是:

Form2 f2 = new Form2;
f2.MdiParent = this.MdiParent;
f2.Show();

5

好的,不是要反驳已经列出的“解决方案”......但如果我正确理解了请求并且尝试上述解决方案没有成功,我会执行以下操作....

Form2 f2 = new Form2();
        f2.MdiParent = MDIParent1.ActiveForm;
        f2.Show();

0
假设第二个表单为frm2。那么,在MDI父窗体中创建新表单frm2的frm1代码将是:创建新对象,然后再检索数据mdiparent表单解决冻结dispose表单。
Dim dru as New frm2 '// another form call
dru = New frm2
dru.mdiparent = frm1 '// main forms
dru.show()

0

我曾经遇到了同样的问题,并尝试了各种不同的解决方案。最终,让我成功的是:

Dim ChildForm As New AddingText("")
' Make it a child of this MDI form before showing it.
ChildForm.MdiParent = MDIParent1
ChildForm.Dock = DockStyle.Fill
MDIParent1.m_ChildFormNumber += 1
ChildForm.Text = "Client Existent" & MDIParent1.m_ChildFormNumber
ChildForm.Show()

问题在于它无法与ShowDialog()一起使用,但我可以接受。


感谢您回答一个10年前的问题 :) - Dumbo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接