【问题标题】:Don't want button focus on form opening [duplicate]不希望按钮专注于表单打开[重复]
【发布时间】:2013-05-24 15:19:20
【问题描述】:

我有这个问题...当我的表单打开时,一个按钮被聚焦。我不想让我专注。我在表单上放了一个不可见的小面板并将其设置为起始焦点(也设置为tabstop = false)。但是...按钮仍然是焦点。

可能是什么问题?

我试过了:

private void Form_Load(object sender, EventArgs e)
{
   panel.Focus();
}

但仍然没有任何反应,按钮仍然是焦点。

【问题讨论】:

  • 在加载时从按钮上移除焦点?
  • 您可以将AcceptButton 设置为nullAcceptButton = null; //or any other button 而不是panel.Focus();)。
  • 不,它不是重复的,因为我尝试了很多方法,但仍然......按钮是焦点。在写这个问题之前,我使用 TabIndex 来设置控件的顺序,但仍然......按钮是焦点。

标签: c# winforms


【解决方案1】:

Panel 控件派生自 ContainerControl。它为充当其他控件容器的控件提供了通用行为。其中包括想成为焦点。如果您尝试给他们焦点,他们会立即将其传递给子控件。

这是有充分理由的,用户需要能够看到哪个控件具有焦点。所以他知道键盘敲击的去向。并且容器控件没有办法显示它。他们也没有通过击键做任何合理的事情。您当然可以修改 Panel 控件以使其成为可聚焦的控件,this answer 展示了如何。

但要稍微关注一下为什么你想让用户感到困难。也许你有点关注焦点矩形的“瑕疵”?如果你真的想隐藏它,那么你可以,这很简单。只需添加一个虚拟按钮并给它一个负的 Location 属性和一个 0 的 TabIndex。这会将其移出窗口,不再对用户可见。但仍然能够集中注意力。解决了“瑕疵”问题,但存在严重混淆用户的风险。

【讨论】:

    【解决方案2】:

    您可以更改控件的TabIndex,以便将其集中在您希望的顺序中

    【讨论】:

      【解决方案3】:

      我认为您的面板无法聚焦。在您的面板中尝试一个控件。

      【讨论】:

        【解决方案4】:

        如果您希望在打开表单时按钮不具有焦点,则需要更正TabIndex 属性。 TabIndex 属性有一个整数作为值,它指定按下 Tab 键时控件获得焦点的顺序。如果控件将 TabIndex 设置为 0,则将其更改为其他值。

        或者

        您还可以将控件TabStop 属性设置为false。

        TabIndexTabStop 属性的文档。

        【讨论】:

          【解决方案5】:

          Form 的名为AcceptButtons 的属性将其设置为(none)

          【讨论】:

            猜你喜欢
            • 2021-12-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-07
            • 1970-01-01
            • 1970-01-01
            • 2017-10-13
            相关资源
            最近更新 更多