C# 面板中只有一种形式可见,以第一种形式为准
我创建了两个表单(Message1和message2)和一个主表单。我正在根据主面板组合选择动态加载一个消息表单。主面板有一个带有两个选项(1和2)的组合框和一个空面板。 我对此进行了测试,但只有一个表单是可见的,无论哪个表单是先选择的 代码如下:C# 面板中只有一种形式可见,以第一种形式为准,c#,winforms,C#,Winforms,我创建了两个表单(Message1和message2)和一个主表单。我正在根据主面板组合选择动态加载一个消息表单。主面板有一个带有两个选项(1和2)的组合框和一个空面板。 我对此进行了测试,但只有一个表单是可见的,无论哪个表单是先选择的 代码如下: private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { ComboBox cbox = (ComboBox)send
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cbox = (ComboBox)sender;
if(cbox.SelectedIndex == 0)
{
Message1 objForm = new Message1();
objForm.TopLevel = false;
panel1.Controls.Add(objForm);
objForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
objForm.Dock = DockStyle.Fill;
objForm.Show();
}
else
{
if(cbox.SelectedIndex == 1)
{
Message2 objForm = new Message2();
objForm.TopLevel = false;
panel1.Controls.Add(objForm);
objForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
objForm.Dock = DockStyle.Fill;
objForm.Show();
}
}
}
我遗漏了什么?好的,谢谢你的回答。clear()可以工作
处理以前的表单。在新建之前执行
panel1.Controls.Clear()
。Add
@SinatrClear()
不处理。谢谢Clear()不在面板上显示。我有200条这样的信息,你认为增加200条这样的表格好吗?我已在中更新了代码answer@jdwengShow()
没有阻止任何内容。TopLevel=false代码>这些表单只是美化的用户控件。您应该移动objForm1=newmessage1();objForm2=新消息2()
到窗体的构造函数,这样它们每次只创建一次,这将使panel1.Controls.Clear()
正常工作。现在,您正在创建多个表单,而不必在每次更改组合框时都处理它们。正如LarsTech在注释中提到的,.Controls.Clear()
不会处理您添加到该集合中的对象(无论这些对象是什么),它只是从集合中删除引用:原始对象仍然处于活动状态。如果每个对象中有多个对象,则向后循环并调用Dispose()
。无论选择了什么,都要清除集合,因此只需执行一次即可。也可以构建工厂,因此只需传递要创建的对象类型。(表单而不是用户控件,IMO,错误的选择)。
public partial class MainPanel : Form
{
Message1 objForm1;
Message2 objForm2;
public MainPanel()
{
InitializeComponent();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cbox = (ComboBox)sender;
objForm1 = new Message1();
objForm2 = new Message2();
if (cbox.SelectedIndex == 0)
{
panel1.Controls.Clear();
objForm1.TopLevel = false;
panel1.Controls.Add(objForm1);
objForm1.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
objForm1.Dock = DockStyle.Fill;
objForm1.Show();
}
else
{
if(cbox.SelectedIndex == 1)
{
panel1.Controls.Clear();
objForm2.TopLevel = false;
panel1.Controls.Add(objForm2);
objForm2.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
objForm2.Dock = DockStyle.Fill;
objForm2.Show();
}
}
}
}