首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NumericUpDown无效值

NumericUpDown无效值
EN

Stack Overflow用户
提问于 2013-12-11 08:43:55
回答 2查看 1.3K关注 0票数 1

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

我试图解决NumericUpDown (我将称之为Num)控件的一个问题:假设Num具有以下属性:

最低: 10级: 60级:1

如果用户想要更改值,有两种方法可以做到这一点:单击箭头( Num的右侧)或手动直接向Num输入值。第一种方式是可以的,但大多数用户使用的是第二种方式,并且有一个小问题。

如果用户在间隔之外输入一些值(例如1),那就可以了,因为他可以继续使用5输入,所以最终值是51,这是在间隔内的。但是,如果他停止在值1之后键入值,这意味着他从区间(1)中键入值。如果他单击Num之外的某个位置,则值(超出间隔)将自动更改为最近的允许值(在1的情况下,值将更改为10)。

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

我知道我可以添加TextChanged事件,但是有一个问题:如果他键入一些无效值(5),它可以更改为有效值(通过添加1使其生成15)。

你对如何解决这个问题有什么想法吗?我知道这很愚蠢,但这不取决于我,我必须这样做,我也不知道怎么做。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-12 10:34:02

所以这就是我的解决方案:

我处理TextChanged事件,在这个方法中,我将text分配给它的tag

代码语言:javascript
复制
Private Sub NUDTextChanged()
    Integer.TryParse(NUD.Text, NUD.Tag)
End Sub

然后:

代码语言:javascript
复制
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在自动更改之前,所以我可以很容易地控制该值是否有效。

票数 0
EN

Stack Overflow用户

发布于 2013-12-11 10:26:49

使用丢失焦点,而不是在设计阶段设置最小值,用If语句检查它。

代码语言:javascript
复制
 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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20514400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档