NumericUpDown值无效

时间:2013-12-11 08:43:55

标签: vb.net winforms event-handling numericupdown

我在WinForms中有一个应用程序,我有很多控件。这些控件表示应用程序的设置,用户可以通过单击按钮来保存此设置。

我正在尝试解决NumericUpDown(我将其称为Num)控制的问题:让我们说Num有这些属性:

最低:10 最高:60 步骤:1

如果用户想要更改值,有两种方法可以执行此操作:单击箭头(Num的右侧)或手动将值直接键入Num。第一种方法是可以,但大多数用户使用第二种方式,并有一个小问题。

如果用户在例如1的间隔之外输入某个值,则可以,因为他可以继续输入5,因此最终值为51,这是在间隔内。但是如果他在值1之后停止输入,则意味着他在区间(1)之外输入值。如果他点击Num之外的某个地方,则值(超出间隔)将自动更改为最接近的允许值(如果为1,则值将更改为10)。

但是他可能不会注意到这种自动更改,所以我想以某种方式处理它,并通知他,他把那些无效值。但是这种情况不是由Num的任何事件处理的(没有办法找出他放在那里的这个无效值 - 如果我尝试读取ValueChanged事件中的值,它会自动读取更改的值,而不是无效的值)。 / p>

我知道我可以添加TextChanged事件,但是如果他输入了一些无效值(5),则可以将其更改为有效值(通过添加1使其生成15)。

您对如何解决此问题有任何想法吗?我知道这是愚蠢的,但这不依赖于我,我必须这样做,我不知道如何。

2 个答案:

答案 0 :(得分:1)

使用Lost Focus,而不是在设计阶段设置最小值,用If语句检查它。

 Private Sub Num_LostFocus(sender As Object, e As System.EventArgs) Handles Num.LostFocus
     If Num.Value < 10 Then MsgBox("Number is incorrect")
 End Sub

或者您可以创建一个自定义控件,您可以在其中覆盖将值更改为最小值但我从未尝试过的事件。

答案 1 :(得分:0)

所以这是我的解决方案:

我处理TextChanged事件,在此方法中,我将text分配给tag

Private Sub NUDTextChanged()
    Integer.TryParse(NUD.Text, NUD.Tag)
End Sub

然后:

Private Sub NUD_LostFocus() Handles NUD.LostFocus
    If NUD.Tag < NUD.Minimum Or NUD.Tag > NUD.Maximum Then
        ' show message
    End If
End Sub

处理Validating事件对我来说没用,因为在验证之前自动更改为允许值,并且此自动更改触发TextChange事件,因此在验证后我有新值而无效值。

LostFocus在自动更改之前,因此我可以轻松控制该值是否有效。