文本框不会失去焦点

时间:2011-08-30 05:54:49

标签: c# winforms textbox drawing

我有一张覆盖整个屏幕的表格。我有一个textbox,它通常是隐藏的,但是当用户点击,拖动鼠标然后离开时出现。之后,用户可以在文本框中输入任何值。一旦输入,理想情况下用户应该能够在文本框外单击,然后恢复正常服务。

通过正常服务我的意思是表单应该开始获取所有事件。到目前为止我所做的是在TextBox的KeyDown事件上;当按下Escape键时,我将焦点设置为主窗体,如下所示:

this.Focus(); //where this is mainform.

但这似乎不起作用,因为Textbox仍然保持接收所有密钥。我有KeyDownForm的{​​{1}}事件处理程序,我检查过所有Textbox事件都传递给TextBox。我有一个KeyDown离开事件处理程序,它永远不会被调用。

TextBox是表单上的唯一控件,主窗体用于绘制形状(如果重要)。

那么,当用户点击它之外时,如何让TextBox失去焦点。

3 个答案:

答案 0 :(得分:0)

如果它像VB一样工作,我记得,尝试将表单属性KeyPreview设置为false,这样所有键都只会传递给表单上的焦点控件。

答案 1 :(得分:0)

如果您将表单KeyPreview属性设置为true,则表单首先有机会处理您所做的任何击键。如果它是您想要处理的内容,例如上面的注释中的转义,请在表单的KeyDownEvent中处理它并将其标记为已处理,以便您的文本框不会看到它。

来自Msdn Page:

  

当此属性设置为true时,表单将接收所有KeyPress,KeyDown和KeyUp事件。在表单的事件处理程序完成按键处理后,键击将被分配给具有焦点的控件。

答案 2 :(得分:0)

我想回到'11这不起作用,但现在

this.ActiveControl = null;

工作正常。但是,如果您打算使用Tab来循环控件,那么使用合适的TabIndex聚焦标签就可以了。