2011-08-30 69 views
4

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

正常服务我的意思是表单应该开始获取所有事件。到目前为止我所做的是在TextBox的KeyDown事件上;当按下ESC键,我已经将焦点设置到的主要形式是这样的:

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

但是,这似乎并没有工作,因为Textbox仍保持接收所有的按键。我有一个KeyDown事件处理程序,用于FormTextbox,并且我已检查所有KeyDown事件传递给TextBox。我有一个TextBox离开事件处理程序以及永远不会被调用。

TextBox是窗体上的唯一控件,主窗体用于绘制图形(如果有的话)。

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

+1

这个问题在这里得到解答:[http://stackoverflow.com/questions/1140250/how-to-remove-focus-from-a-textbox-in-c-winforms][1] [1]:http://stackoverflow.com/questions/1140250/how-to-remove-focus-from-a-textbox-in-c-winforms – mmorel

+0

按照@ mmorel1的链接,你需要有另一个控件可见= true,但不在表格范围内。例如Textbox1.Left = -20; –

+0

@Jeremy Thompson:在这种情况下,焦点将转移到该文本框,我的主窗体将停止接收密钥。例如,在mainform上的Escape按钮上,我隐藏了表单。那是不可能的。任何想法如何做到这一点? – Aamir

回答

0

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

+0

默认情况下,KeyPreview是False,这意味着Key不会被父级,即mainform预览。我试图将其设置为True,但这也不起作用。 – Aamir

0

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

从上面MSDN页面:

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

0

我想回到这个'11没有工作,但现在

this.ActiveControl = null; 

工作正常。但是,如果您打算使用Tab来循环控制,则将标签与适当的TabIndex对齐即可。