2011-08-30 83 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對齊即可。