2012-09-21 29 views
1

防止接近我有一個.net WinForm的對話框,其中顯示文本框一些(它們中的一些是多行),標記爲的AcceptButton和一個按鈕標記作爲CancelButton截取返回鍵時上的多行TextBox,的對話框

當您按回車鍵時,會觸發AcceptButton的onClick事件並關閉對話框。

問題在於即使用戶試圖在多行文本框中插入新段落,也會觸發onClick事件。阻止窗體關閉的唯一方法是按下CTRL + Return。

這是WinForm TextBox控件的一個明顯錯誤。 例如,DataGridView可以正確捕獲返回鍵並且不會將它傳遞給WinForm對話框。

TREID 選擇()對焦(),覆蓋PreProcessMessageProcessKeyMessage(這奇怪的甚至不火)。沒有運氣。

回答

2

我笨!

TextBox的布爾屬性名爲AcceptReturn

我認爲它應該由VS自動檢查當檢查多行

0

我解決了檢查對焦狀態+ ReturnKey狀態在的onclick事件處理程序接受按鈕

If (UdaNoteTextBox.Focused) Then 
    Dim returnKey As NullFX.Win32.KeyStateInfo = NullFX.Win32.KeyboardInfo.GetKeyState(Keys.Enter) 
    If (returnKey.IsPressed) Then 
     Dim caretFinalPos As Int32 = UdaNoteTextBox.SelectionStart + 2 
     UdaNoteTextBox.Text = UdaNoteTextBox.Text.Substring(0, UdaNoteTextBox.SelectionStart) + vbCrLf + UdaNoteTextBox.Text.Substring(UdaNoteTextBox.SelectionStart + UdaNoteTextBox.SelectionLength) 
     UdaNoteTextBox.SelectionStart = caretFinalPos 
     UdaNoteTextBox.SelectionLength = 0 
     UdaNoteTextBox.ScrollToCaret() 
     Return 
    End If 
End If 

要檢查我用這個類,其中進口舊的User32.dll ReturnKey狀態,因爲這函數似乎不存在於.net框架中。

http://sanity-free.com/17/obtaining_key_state_info_in_dotnet_csharp_getkeystate_implementation.html

相關問題