我有几个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(),因为我需要重点保持不变。
创建您自己的无法选择的按钮类。
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,并将焦点设置为每次。 我想你也可以把控制权放在别的东西的外面,或者放在不可调整大小的窗体或面板的范围之外。