Panel可见性问题

时间:2012-08-31 11:24:06

标签: winforms compact-framework layer

有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

2 个答案:

答案 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)

可能的解决方案:

不带面板制作