C#停止button从关注点击

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

我想要与Windows计算器中的button相同的function。

谷歌search堆栈一切似乎是关于forms如。 使窗体不能在C#中集中

我知道我应该重写WndProc,但不完全确定如何处理,我应该赶上/忽略什么消息等。据我得到:

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

你所要做的就是将这一行添加到键的Click事件的末尾:

 this.Focus(); 

这一行会导致按钮失去焦点,表单将获得焦点,空格键将无效,从而满足您的两个条件。

现在,如果您不希望按钮能够再次被点击,请添加以下两行代码:

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

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

我今天处理了这个问题,下面是对我来说最简单的答案。 我不想使用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而不是系统版本更新设计文件。 应该在每个实例的两个位置。

Nb:Visual Studio设计师可能会暂时中断预览,直到按下“开始”。

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

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