如何禁止将焦点放在另一个控件后面的控件上?

时间:2017-01-11 21:16:16

标签: c# winforms

目前我的表单布局如下:

  • button1的
  • PANEL1
    • BUTTON2
  • 是Panel2
    • BUTTON3
两个面板上都设置了

Dock = DockStyle.Fill。显示表单时,两个面板都被隐藏。单击button1时,将显示panel1。单击button2时,将显示panel2。现在,用户可以看到或单击的唯一控件是button3和panel2。但是他们可以通过按Tab键将焦点放在button1或button2上。

按钮的点击事件:

    private void button1_Click(object sender, EventArgs e)
        {
            panel1.Visible = true;
            panel1.BringToFront();
        }

后退按钮的点击事件:

    private void back_button1_Click(object sender, EventArgs e)
        {
            panel1.Visible = false;
        }

我该如何防止这种情况?

另外,为什么我选择这个设计?因为实际上有很多面板,其中许多可以以多种方式显示,并且在它们上面有一个后退按钮。因此,当按下后退按钮时,唯一要做的就是隐藏当前面板,并且不需要知道之前显示的面板。

1 个答案:

答案 0 :(得分:0)

我终于通过选择其他方式解决了这个问题。这是我添加到表单中的代码:

    private List<Panel> Pages { get; } = new List<Panel>();

    public Panel CurrentPage
    {
        get
        {
            return Pages.Last();
        }
    }
    public void ShowPage(Panel page)
    {
        Pages.Add(page);

        foreach (var panel in Controls.OfType<Panel>())
        {
            if (panel.Dock == DockStyle.Fill)
                panel.Visible = false;
        }

        page.Visible = true;
    }
    public void HidePage()
    {
        if (CurrentPage != null)
            CurrentPage.Visible = false;

        Pages.RemoveAt(Pages.Count - 1);

        if (CurrentPage != null)
            CurrentPage.Visible = true;
    }