我有一张覆盖整个屏幕的表格。我有一个textbox
,它通常是隐藏的,但是当用户点击,拖动鼠标然后离开时出现。之后,用户可以在文本框中输入任何值。一旦输入,理想情况下用户应该能够在文本框外单击,然后恢复正常服务。
通过正常服务我的意思是表单应该开始获取所有事件。到目前为止我所做的是在TextBox的KeyDown事件上;当按下Escape键时,我将焦点设置为主窗体,如下所示:
this.Focus(); //where this is mainform.
但这似乎不起作用,因为Textbox
仍然保持接收所有密钥。我有KeyDown
和Form
的{{1}}事件处理程序,我检查过所有Textbox
事件都传递给TextBox。我有一个KeyDown
离开事件处理程序,它永远不会被调用。
此TextBox
是表单上的唯一控件,主窗体用于绘制形状(如果重要)。
那么,当用户点击它之外时,如何让TextBox
失去焦点。
答案 0 :(得分:0)
如果它像VB一样工作,我记得,尝试将表单属性KeyPreview
设置为false,这样所有键都只会传递给表单上的焦点控件。
答案 1 :(得分:0)
如果您将表单KeyPreview属性设置为true,则表单首先有机会处理您所做的任何击键。如果它是您想要处理的内容,例如上面的注释中的转义,请在表单的KeyDownEvent中处理它并将其标记为已处理,以便您的文本框不会看到它。
来自Msdn Page:
当此属性设置为true时,表单将接收所有KeyPress,KeyDown和KeyUp事件。在表单的事件处理程序完成按键处理后,键击将被分配给具有焦点的控件。
答案 2 :(得分:0)
我想回到'11这不起作用,但现在
this.ActiveControl = null;
工作正常。但是,如果您打算使用Tab来循环控件,那么使用合适的TabIndex聚焦标签就可以了。