我正在尝试使用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;
}
答案 0 :(得分:1)
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;
}
答案 1 :(得分:0)
这取决于如何布置面板。我怀疑你甚至没有将面板添加到表单中,或者将面板放在错误的位置。我想您要填充Panels
中的Form
,我们可以使用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
已正确注册。您还应该以不同方式设置BackColor of
panel1 and
panel2`,如下所示:
//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
。
答案 2 :(得分:0)
此外,您需要重新找到面板
panel1.Location = new Point(0, 0); //the preferd new postion
panel2.Location =new Point(1000,1000)//far away
panel2.Visible=false;
panel1.Visible=true;
答案 3 :(得分:0)
这正是因为您将一个面板放在另一个面板的顶部,这些面板正在重叠。 因此,在执行程序时,您无法看到至少一个面板。程序中没有错误,但要避免此问题,请按照以下步骤操作。
1.在加载表格时,请确保最初隐藏所有面板。
2.在将任何面板可见性更改为true时,请确保将所有面板的可见性设置为false(隐藏)。
3.删除彼此重叠的面板。
谢谢。
答案 4 :(得分:0)
另一个解决方案是使用没有标题的TabControl
,这在IDE中更易于管理,因为您可以看到标签,并且可以在设计时间间在它们之间切换,并且它们在运行时隐藏时间。
看到这个: How do I create a TabControl with no tab headers?
非常适合巫师等: - )
只需添加更改当前有效标签的按钮。
private void button1_Click(object sender, EventArgs e)
{
tabControl1.SelectTab("tabPage2");
}
答案 5 :(得分:0)
如果panel2在panel1中,则panel1将成为panel2的父级(而不是您的表单)。如果是这种情况,那么如果隐藏父(panel1),则将panel2设置为可见将不起作用。您可以尝试并排放置面板,看看点击按钮是否有效。
此问题的解决方法是在代码中设置 Parent 属性:
private void Form1_Load(object sender, EventArgs e)
{
panel1.Parent = this;
panel2.Parent = this;
}
答案 6 :(得分:0)
我是这样的:当我命名面板时,他们所有的名字都以“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);
}