1

我有一个 .net WinForm 对话框,它显示一些 TextBoxes(其中一些是Multiline)、一个标记为AcceptButton的按钮和一个标记为CancelButton的按钮。

当您按下返回键时,AcceptButton的 onClick 事件被触发并且对话框关闭。

问题是即使用户尝试在多行文本框中插入新段落,也会触发 onClick 事件。防止表单关闭的唯一方法是按 CTRL + Return。

这显然是 WinForm TextBox 控件的一个错误。例如,DataGridView 正确地捕获了 Return 键并且不会将其传递给 WinForm 对话框。

Treid Select()Focus(),覆盖PreProcessMessageProcessKeyMessage(奇怪的是甚至不触发)。没运气。

4

2 回答 2

2

我笨!

TextBox 有一个名为AcceptReturn的布尔属性。

我认为它应该在检查Multiline时由 VS 自动检查。

于 2012-09-21T09:58:56.707 回答
0

我解决了在接受按钮的 onClick 事件处理程序中检查焦点状态 + 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

于 2012-09-21T08:50:23.077 回答