我有1个表单的3个面板来完成输入某些数据的过程。单击面板中的下一个按钮时,应显示下一个面板。
最初,我启用了第一个面板的可见性,并禁用了其他面板的可见性。
单击下一个按钮时,将执行以下代码。
panel1.Visible = false;
panel2.Visible = true;
为了发展的目的,我把它们并排放在一起(不是一个又一个),它完美无缺
但是当我把它们放在另一个上面时,上面的代码看起来似乎不是什么,这意味着当点击下一个按钮时,它只显示一个空的表格。
然后我也添加了下面的代码。
panel1.SendToBack();
panel2.BringToFront();
但它没有用。有人可以帮我这个。
谢谢。
答案 0 :(得分:8)
设计师总是出错,底部面板将成为顶级面板的父母。因此,如果你隐藏底部的那个,你就看不到顶部的那个。
这可以通过View>解决。 (其他Windows)>文档大纲,将顶部面板拖回到表单。仍然非常痛苦,你通常需要手工编辑位置,然后在设计师中对表单进行任何更改往往会使面板黯然失色。
有更好的方法可以做到这一点。强烈建议使用创建UserControl,它们有自己的设计图面。或者使用RAD方式并使用TabControl执行此操作。您所要做的就是在运行时隐藏选项卡,这是this Q+A。
的主题答案 1 :(得分:4)
将容器控件(例如Panel
'放在另一个上时)必须小心。
在设计师中,您可以执行此操作,但仅通过使用键盘轻轻移动面板。只要左上角进入另一个角落,使用鼠标将始终将移动的置于而不是 另一个
。作为替代方案,您可以移动代码。
在代码中执行此操作具有仍然能够使用下面板及其内容的优点。有时我将它们填入(在运行时不可见的)虚拟标签的标签页中,然后将其移入或移出页面以隐藏和显示它们。
答案 2 :(得分:1)
以下是可用于同时拥有多个面板的代码,并在下一个按钮添加到表单之间切换它们。
public Form1()
{
InitializeComponent();
panel1.Visible = true;
panel3.Visible = false;
panel2.Visible = false;
}
private void btnNext_Click(object sender, EventArgs e)
{
if (panel1.Visible)
{
panel1.Visible = false;
panel2.Visible = true;
panel3.Visible = false;
}
else if (panel2.Visible)
{
panel1.Visible = false;
panel2.Visible = false;
panel3.Visible = true;
}
else if (panel3.Visible)
{
panel1.Visible = true;
panel2.Visible = false;
panel3.Visible = false;
}
}
当然,如果您以升序/降序格式标记您的面板,标签之间没有间隙,例如1,2,3,4或5,4,3,2而不是1,2,4你可以使用这段代码
public Form1()
{
InitializeComponent();
panel1.Visible = true;
panel2.Visible = false;
panel3.Visible = false;
}
private void btnNext_Click(object sender, EventArgs e)
{
TogglePanels();
}
public void TogglePanels()
{
List<Panel> allPanelsInForm = new List<Panel>();
foreach (var control in Controls)
{
if (control is Panel)
allPanelsInForm.Add(control as Panel);
}
Panel visiblePanel = allPanelsInForm.Where(o => o.Visible).FirstOrDefault();
int nextPanelId = Convert.ToInt32(visiblePanel.Tag) + 1;
bool nextPanelExists = allPanelsInForm.Exists(o => Convert.ToInt32(o.Tag) == nextPanelId);
nextPanelId = nextPanelExists ? nextPanelId : 1;
foreach (Panel panel in allPanelsInForm)
{
panel.Visible = Convert.ToInt32(panel.Tag) == nextPanelId ? true : false;
}
}
我希望它可以帮到你。