c#停止按钮从获得焦点点击

本文关键字:焦点 按钮 | 更新日期: 2023-09-27 18:02:57

我有几个按钮,当点击时,我不希望他们获得焦点,也不希望空格键再次"按"他们。

我想要相同的功能,按钮在windows计算器。

谷歌和搜索堆栈似乎一切都是关于表单。在c#中设置一个不可聚焦的表单

我知道我应该重写WndProc,但不完全确定如何继续我应该捕捉/忽略什么消息等。我得到:

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

c#停止按钮从获得焦点点击

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

http://social.msdn.microsoft.com/forums/windows/en us/f1babeac - 4 - bd9 - 498 f - b19b - 90 b9fed0d751/c阻止——按钮——获得- -关注点击

创建自己的不能被选中的按钮类。

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设计器可能会暂时中断预览,直到你按下开始。

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

this.Focus();

这一行将使按钮失去焦点,窗体将获得焦点,空格将不起作用,从而满足您的2个条件。

现在,如果你不希望按钮能够被再次点击,然后添加这两行代替:

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

这将做其他行所做的,另外,它将禁用按钮。

正如评论中提到的,我发现最简单的方法是向表单添加一个不做任何事情的输入控件(没有事件处理程序),然后在按钮的OnClick方法中使用Control.Focus()。但是,请注意,如果您将虚拟控件的Visible属性设置为false,则此操作将不起作用。

所以我的解决方案是添加一个虚拟按钮,将其大小设置为0,0,并将焦点设置为每次。我想你也可以把控件放在其他东西后面或在不可调整大小的窗体或面板的边界之外。