我的问题似乎很简单,但它不是直观的方式。
我正在设计一个Windows窗体应用程序,并且有一个对话框在按下回车键时不应该退出,而是必须先验证数据,以防在更改的文本后按下输入组合框
如果 e 是 Enter >,我已经尝试告诉它如何处理 ComboBox 的 KeyPress 事件 em> key:
Private Sub ComboBoxSizeChoose_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBoxSizeChoose.KeyPress
If e.KeyChar = Convert.ToChar(Keys.Enter) Then
Try
TamanhoDaNovaFonte = Single.Parse(ComboBoxSizeChoose.Text)
Catch ex As Exception
Dim Dialogo2 As New Dialog2
Dialog2.ShowDialog()
ComboBoxSizeChoose.Text = TamanhoDaNovaFonte
End Try
End If
End Sub
但到目前为止没有成功。按 Enter 键时,即使组合框处于焦点,整个对话框也会关闭,返回上一个表单。验证未完成,必须在退出之前完成。事实上,我甚至不想退出表单的输入KeyPress,整个对话框中输入键的唯一目的是验证ComboBox(但只有在焦点时,为了直观的用户界面)。 / p>
如果密钥是 Enter ,我还尝试将验证附加到整个对话框表单的KeyPress事件中。没有成功!这就像我的代码根本就没有。
我该怎么办?
(Visual Studio 2008,VB.NET)
答案 0 :(得分:3)
确保在对话框中没有设置为DialogResult.None以外的其他按钮。
例如,如果您将按钮设置为DialogResult.OK,它将作为“默认”按钮并关闭您的表单。
答案 1 :(得分:0)
虽然不是你的答案,但我建议不要使用异常来控制逻辑流程。也就是说,尝试Single.TryParse而不是让你的流量减少......好吧,例外。
要更改您看到的行为,请将对话框的AcceptButton从“Ok”按钮更改为“none”。将该按钮的DialogResult更改为None不会使click事件无法触发,只能关闭对话框。虽然这种行为可能听起来像你想要的,但结果并非如此。