0

有 3 个面板 pnlPanel0、pnlPanel1、pnlPanel2,大小相同,位置相同。

使用“左”或“右”按钮,我需要更改每个面板的可见性。

使用 pnlPanel0(包含标签)和 pnlPanel2(包含按钮)- 确定。

但是使用 pnlPanel1(包含 ListView):

curLayer == 1:在 pnlPanel1.Visible = true 之后;带有 ListView 的面板仍然不可见。

但是如果 pnlPanel1 没有与 pnlPanel0 和 pnlPanel2 相交 - 可以。

为什么?

在这种情况下,“带到前面”/“发送到后面”可能有问题吗?

还有其他安全且无问题的解决方案吗?

     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

4

2 回答 2

1

我有一个表格,上面有大约 7 个面板控件。

Form_Load,所有面板都设置为.Dock = DockStyle.Fill;

此外,所有小组都共享相同的GotFocus事件:

private void ActivePanel_GotFocus(object sender, EventArgs e) {
  Panel pnl = sender as Panel;
  if (pnl != null) {
    pnl.BringToFront();
  }
}

你需要对特定的面板做些什么吗?OK,那就看看这个版本:

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
    }
  }
}
于 2012-08-31T20:41:31.303 回答
-1

可能的解决方案:

让它没有面板

于 2012-08-31T12:32:38.987 回答