我有一个.net WinForm对话框,它显示一些TextBoxes(其中一些是 Multiline ),一个标记为 AcceptButton 的按钮和一个标记为 CancelButton的按钮
当您点击返回键时,会触发 AcceptButton 的onClick事件并关闭对话框。
问题是即使用户试图在多行TextBox中插入新段落,也会触发onClick事件。阻止关闭表单的唯一方法是按CTRL + Return。
这显然是WinForm TextBox控件的一个错误。 例如,DataGridView正确捕获Return键,并且不会将其传递给WinForm对话框。
Treid 选择(),焦点(),覆盖 PreProcessMessage , ProcessKeyMessage (奇怪的是没有甚至火灾。没有运气。
答案 0 :(得分:2)
我很蠢!
TextBox的布尔属性名为 AcceptReturn 。
我认为在检查 Multiline 时,VS应该自动查询。
答案 1 :(得分:0)
我解决了在接受按钮的onClick事件处理程序中检查Focus状态+ ReturnKey状态
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
要检查ReturnKey状态,我使用了这个类,它导入旧的User32.dll,因为.net框架中似乎不存在此函数。
http://sanity-free.com/17/obtaining_key_state_info_in_dotnet_csharp_getkeystate_implementation.html