我正在尝试使用 winforms 制作一个多页应用程序。我决定使用多个面板 - 每个面板代表不同的页面,因此当我需要显示不同的内容时,我可以在它们之间切换。 我在运行时的问题是当我尝试在面板之间切换时,它不起作用。
我的代码:
private void Form2_Load(object sender, EventArgs e)
{
panel2.Visible = false;
}
private void label4_Click(object sender, EventArgs e)
{
panel1.Visible = true;
}
private void label5_Click(object sender, EventArgs e)
{
panel2.Visible = true;
panel1.Visible = false;
}
private void Form2_Load(object sender, EventArgs e)
{
panel2.Visible = false;
}
private void label4_Click(object sender, EventArgs e)
{
panel1.Visible = true;
panel2.Visible = false;
}
private void label5_Click(object sender, EventArgs e)
{
panel2.Visible = true;
panel1.Visible = false;
}
此外,您需要重新定位面板
panel1.Location = new Point(0, 0); //the preferd new postion
panel2.Location =new Point(1000,1000)//far away
panel2.Visible=false;
panel1.Visible=true;
这取决于您如何布局面板。我怀疑您甚至没有将面板添加到表单中,或者将面板放置在错误的位置。我想你想在你的Form
中填充Panels
,我们可以使用 BringToFont()
方法来显示你的面板。试试这个:
private void Form2_Load(object sender, EventArgs e){
panel1.Dock = panel2.Dock = DockStyle.Fill;
panel1.Parent = panel2.Parent = this;//this refers to Form2
}
private void label4_Click(object sender, EventArgs e) {
panel1.BringToFront();//show panel1
}
private void label5_Click(object sender, EventArgs e){
panel2.BringToFront();//show panel2
}
注意:要查看它的实际效果,您应该确保您的label4_Click
、label5_Click
和Form2_Load
已正确注册。您还应该以不同的方式设置 panel1 and
panel2' BackColor of
,如下所示:
//your Form2 constructor
public Form2(){
label4.Click += label4_Click;
label5.Click += label5_Click;
Load += Form2_Load;
panel1.BackColor = Color.Green;
panel2.BackColor = Color.Red;
}
由于您将面板填充到所有表单客户端矩形中,因此应将label4
添加到panel2
,label5
应添加到panel1
。
因为您将一个面板放在另一个面板的顶部,并且这些面板重叠。因此,在执行程序时无法看到至少一个面板。程序中没有错误,但为避免此问题,请按照以下步骤操作。
1.加载表格时,请确保所有面板最初都处于隐藏状态。
2.将任何面板可见性更改为 true 时,请确保将剩余所有面板可见性设置为 false(隐藏)。
3.尝试移除彼此重叠的面板。
谢谢。
另一种解决方案是使用没有标头的TabControl
,这在 IDE 中更容易管理,如您所看到的选项卡,并且可以在设计时在它们之间切换,并且它们在运行时是隐藏的。
看到这个:如何创建没有选项卡标题的选项卡控件?
非常适合巫师等:-)
只需添加更改当前活动选项卡的按钮即可。
private void button1_Click(object sender, EventArgs e)
{
tabControl1.SelectTab("tabPage2");
}
如果 panel2 在 panel1 内,panel1 将成为 panel2 的父级(而不是您的表单)。如果是这种情况,则在隐藏父面板 (panel1) 的情况下,将 panel2 设置为可见将不起作用。您可以尝试将面板并排放置,看看单击按钮是否有效。
此问题的解决方法是在代码中设置 Parent 属性:
private void Form1_Load(object sender, EventArgs e)
{
panel1.Parent = this;
panel2.Parent = this;
}
我是这样的:当我命名面板时,它们的所有名称都以"pnl"开头。由于对象名称有适当性,我们可以像这样搜索它
private void panelVibility(Control ctr)
{
foreach (Control item in this.Controls)
{
if (item.Name.StartsWith("pnl"))
{
item.Location = new Point(12, 27);
item.Visible = false;
}
}
ctr.Visible = true;
}
例如,当您通过button_Click调用方法时,您将要变为可见的面板作为参数发送。
private void btnPnl1_Click(object sender, EventArgs e)
{
panelVibility(pnl1);
}