我想在面板中打开一个表单,但我想从已经在该面板中的表单中打开该表单。 示例:我的面板名称是面板,我有3个表单,form1,form2,form3。
panel.Controls.Clear();
form2 myForm = new form2();
myForm.FormBorderStyle = FormBorderStyle.None;
myForm.TopLevel = false;
myForm.AutoScroll = true;
panel.Controls.Add(myForm);
myForm.Show();
现在我想用form2
中的按钮打开form3private void button_Click(object sender, EventArgs e){
form3 myForm = new form3();
myForm.FormBorderStyle = FormBorderStyle.None;
myForm.TopLevel = false;
myForm.AutoScroll = true;
panel.Controls.Add(myForm);
myForm.Show();
this.close();
}
那么如何在其他表单中的面板中添加新表单并关闭当前表单
答案 0 :(得分:2)
首先处理面板中的所有内容,不调用this.Close();
(这将关闭您当前的表单):
private void button_Click(object sender, EventArgs e){
Panel p = this.Parent as Panel;
if (p != null) {
while (panel.Controls.Count > 0) {
panel.Controls[0].Dispose();
}
form3 myForm = new form3();
myForm.FormBorderStyle = FormBorderStyle.None;
myForm.TopLevel = false;
myForm.AutoScroll = true;
panel.Controls.Add(myForm);
myForm.Show();
// this.Close();
}
}
调用panel.Clear();
不会丢弃控件,如果您继续添加和清除表单和控件而不处理它们,则可能会造成内存泄漏。
编辑:
再次重新阅读您的问题后,您需要引用父属性以获取当前面板:
Panel p = this.Parent as Panel;
if (p != null) {
form3 myForm = new form3();
myForm.FormBorderStyle = FormBorderStyle.None;
myForm.TopLevel = false;
myForm.AutoScroll = true;
p.Controls.Add(myForm);
myForm.Show();
this.Close();
}
在这种情况下,是的,您可以从Form2调用this.Close()
,因为这只会关闭该表单。