【问题标题】:How can I show a form without any controls focused?如何在没有任何控件的情况下显示表单?
【发布时间】:2011-02-27 19:32:13
【问题描述】:

我想显示一个表单,但我不想让任何控件集中。例如,现在当显示表单时,tabindex 为 0 的按钮是焦点。我希望表单本身而不是按钮成为焦点,这样如果用户不小心按了一个键,它就不会做任何事情。这可能吗?谢谢!

【问题讨论】:

    标签: c# winforms controls


    【解决方案1】:

    最简单的解决方案是:

    protected override void OnShown(EventArgs e)
    {
        base.OnShown(e);
    
        ActiveControl = null;
    }
    

    或者,如果所有控件都在停靠填充的面板内,您可以聚焦面板:

    protected override void OnShown(EventArgs e)
    {
        base.OnShown(e);
    
        pnlMain.Focus();
    }
    

    无论采用哪种方法,按 Tab 键都会将第一个控件聚焦在 Tab 键顺序中。

    【讨论】:

      【解决方案2】:

      如果您在加载页面时将标签设置为焦点,它将不起作用。

      您需要做的是将页面的活动控件设置为您要关注的标签而不是文本框。

      例如:this.ActiveControl = lbltest;

      【讨论】:

        【解决方案3】:

        vaitrafra 的回答就足够了,但是如果您的表单上碰巧有标签,您也可以将焦点设置在该标签上。接受的答案here 提供了更多关于为什么您不能确保表单上的每个控件都没有焦点的原因。

        【讨论】:

          【解决方案4】:

          试试这个:将Panel 控件添加到您的表单并保持默认设置。面板可以有任何尺寸并且可以放置在任何地方。我会打电话给这个成员m_panel。在您的构造函数中,将表单的ActiveControl 属性设置为m_panel。最后,确保面板的TabStop 属性设置为false(默认设置)。

          当表单加载时,m_panel 将获得焦点。但是,由于面板没有边框并且与表单背景颜色相同,因此没有迹象表明它存在,因此您可以有效地说表单本身具有焦点,如您所愿。当用户第一次点击 Tab 或单击控件时,面板将不在等式中(因为 TabStopfalse)并且一切都会正常工作。

          注意:您也可以使用空的Label 而不是Panel,只要适合您。您甚至可以使用现有标签之一。请记住使用ActiveControl 来指定感兴趣的控件,或者通过调用Focus 显式聚焦它,因为它不会自动获得焦点。

          【讨论】:

            【解决方案5】:

            您最初应该将焦点放在相对无害的地方,例如“取消”按钮,如果您的表单包含这样的东西。

            我有 testet 的解决方法;

                private void Form1_Shown(object sender, EventArgs e)
                {
                    textBox1.TabStop = false;
                    textBox1.Focus();
                    textBox1.Left = -300;
                }
            

            这通过将文本框移出可见区域来“隐藏”具有焦点的文本框。 通过以这种骇人听闻的方式进行操作,文本框可以保持焦点。

            [编辑] 这(显然)要求您在表单上有一个名为 textBox1 的文本框,该文本框不用于其他任何内容。

            【讨论】:

              【解决方案6】:

              您可以在_Load 中使用MyInvisibleLabel.Select();,或者,如果有的话,只需点击退出/取消/关闭按钮。

              【讨论】:

                【解决方案7】:

                您可以将每个控件的 TabStop 属性设置为 false,但您将无法在控件之间切换。这对您来说可能是也可能不是一个好的解决方案,但它应该阻止任何控件接收输入,直到用户单击它。

                【讨论】:

                  【解决方案8】:

                  不,你不能。 顺便说一句,有一个解决方法。将隐藏控件添加到表单(例如文本框)并执行

                  TextBox1.Focus();
                  

                  在 Form_Shown 或 Form_Load 事件中。

                  【讨论】:

                  • 是的,但是请注意,这对于经常使用 Tab 键移动的用户来说可能会有些混乱,因为焦点有时会跳到他看不到的地方。并确保你正确设置了隐藏控件的tabindex。
                  • 显然,最好设置TextBox1.TabStop = false。
                  • 我尝试了这个解决方法,但它似乎不起作用。焦点似乎默认回到 taborder 中的第一个可见控件
                  • 根据Control.CanFocus 的文档,我认为隐藏的 (Visible = false) 控件无法获得焦点。
                  • omg,我必须记住,对我来说听起来很明显的事情并不是那么明显。给别人。 “隐藏”并不是指“可见=假”,而是相对于表单位置和最大扩展名“看不见”......类似于 TextBox1.Left=-1000。
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多