从面板内的表单打开面板中的表单
Open a Form in a Panel from a Form inside that Panel
我想在面板内打开一个表单,但我想从该面板内已有的表单打开该表单。
示例:我的面板名称是面板,我有 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 中的按钮打开 form3
private 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();
}
那么如何将新表单添加到其他表单内的面板并关闭当前表单
首先处理面板中的所有内容,不要调用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()
,因为那样只会关闭该表单。
我想在面板内打开一个表单,但我想从该面板内已有的表单打开该表单。 示例:我的面板名称是面板,我有 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 中的按钮打开 form3
private 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();
}
那么如何将新表单添加到其他表单内的面板并关闭当前表单
首先处理面板中的所有内容,不要调用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()
,因为那样只会关闭该表单。