有3个面板pnlPanel0,pnlPanel1,pnlPanel2具有相同的大小和相同的位置。
使用“左”或“右”按钮,我需要更改每个面板的可见性。
使用pnlPanel0(包含标签)和pnlPanel2(包含按钮) - 确定。
但是使用pnlPanel1(包含ListView):
curLayer == 1:在pnlPanel1.Visible = true之后; 具有ListView的面板仍然不可见。
但是如果pnlPanel1没有与pnlPanel0和pnlPanel2相交 - 那么。
为什么?
在这种情况下可能出现“Bring to front”/“Send to back”的错误?
还有另一种安全且无问题的解决方案吗?
if (curLayer == 0)
{
pnlPanel0.Visible = true;
pnlPanel1.Visible = false;
pnlPanel2.Visible = false;
}
else if (curLayer == 1)
{
pnlPanel0.Visible = false;
pnlPanel1.Visible = true;
pnlPanel2.Visible = false;
}
else if (curLayer == 2)
{
pnlPanel0.Visible = false;
pnlPanel1.Visible = false;
pnlPanel2.Visible = true;
}
MessageBox.Show(Convert.ToString(pnlPanel1.Visible)); // always false
.NET CF 3.5 / WinForms / VS 2008 / WinCE
答案 0 :(得分:1)
我有一张表格上有大约7个Panel控件。
在Form_Load
,所有面板都设置为.Dock = DockStyle.Fill;
。
此外,所有专家组都共享同一个GotFocus
事件:
private void ActivePanel_GotFocus(object sender, EventArgs e) {
Panel pnl = sender as Panel;
if (pnl != null) {
pnl.BringToFront();
}
}
您是否需要对特定面板执行某些操作?好的,然后看看这个版本:
private void ActivePanel_GotFocus(object sender, EventArgs e) {
Panel pnl = sender as Panel;
if (pnl != null) {
pnl.BringToFront();
if (pnl.Name == pnlPanel0.Name) {
// Do something with pnlPanel0
}
}
}
答案 1 :(得分:-1)
可能的解决方案:
不带面板制作