【问题标题】:C# Stop Button From Gaining Focus on ClickC# 停止按钮获得点击的焦点
【发布时间】:2011-07-19 02:08:29
【问题描述】:

我有几个按钮,单击时我不希望它们获得焦点,也不希望空格键再次“按下”它们。

我想要与 Windows 计算器中的按钮相同的功能。

谷歌搜索和搜索堆栈的一切似乎都与表单有关,例如。 Make a form not focusable in C#

我知道我应该重写 WndProc,但不完全确定如何处理我应该捕获/忽略哪些消息等。据我所知:

protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);
    }

【问题讨论】:

  • 所以你希望按钮能够被准确按下一次?
  • 我希望该按钮可以多次点击,但我不希望它获得焦点。

标签: c# windows forms button focus


【解决方案1】:

我今天处理了这个问题,下面是对我来说最简单的答案。我不想使用 this.Focus() 因为我需要焦点保持不变。

http://social.msdn.microsoft.com/Forums/windows/en-US/f1babeac-4bd9-498f-b19b-90b9fed0d751/c-stop-button-from-gaining-focus-on-click

创建您自己的无法选择的按钮类。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace YourNameSpaceHere {
    class NoSelectButton : Button{

        public NoSelectButton() {

            SetStyle(ControlStyles.Selectable, false);

        }
    }
}

现在,用 NoSelectButton 代替系统版本来更新设计文件。每个实例应位于两个位置。

注意:Visual Studio 设计器可能会暂时中断其预览,直到您按下“开始”。

【讨论】:

【解决方案2】:

您所要做的就是将此行添加到密钥的Click 事件的末尾:

this.Focus();

这一行会导致按钮失去焦点,表单获得焦点,空格键不起作用,从而满足你的2个条件。

现在,如果您不希望再次单击该按钮,请改为添加以下 2 行:

this.Focus();
((Button)sender).Enabled = false;

这将执行另一行所做的操作,此外,它将禁用按钮。

【讨论】:

  • 按键的点击事件?我想要的是能够单击该按钮,但无论我单击多少次它都不会获得焦点。就像 Windows 计算器按钮一样。如果您打算将其添加到不起作用的按钮单击事件中。
  • @StudentJ - 我知道你想做什么。如果您想模拟 Windows Calculator 功能,则将this.Focus(); 添加到按钮的Click 事件中。相信我,它会做你想做的事。因为当它执行this.Focus(); 行时会发生什么,焦点将离开按钮并返回到表单。
  • 它不会工作焦点仍然保持在按钮上并且不会改变到表单。甚至尝试了一个全新的表单和一个按钮。
  • StudentJ -- 尝试将代码添加到 Button 的 MouseButtonUp 事件
  • 好的,必须将按钮点击的焦点传递给另一个可以获得焦点的控件。显然标签和表单不像文本框和其他输入元素那样获得焦点。
【解决方案3】:

正如 cmets 中所述,我发现最简单的方法是向窗体添加一个不执行任何操作(没有事件处理程序)的输入控件,然后在按钮的 OnClick 方法中使用 Control.Focus()。但是请注意,如果您将虚拟控件的 Visible 属性设置为 false,这将不起作用。

所以我的解决方案是添加一个虚拟按钮,将其大小设置为 0、0,然后每次都将焦点设置为该按钮。我想您也可以将控件放在其他东西后面或不可调整大小的表单或面板的范围之外。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    相关资源
    最近更新 更多