在NumericUpDown控件中设置固定值

时间:2015-12-11 10:44:54

标签: c# numericupdown

与设置NumericUpDown的最小值和最大值相比,如何让用户仅在不同的预设值之间进行选择? (例如5,8,10,15,20,25)。

编辑:我可以区分ValueChanged事件1)点击numericUpDown的箭头,然后2)用keybaord手动更改值吗?

3 个答案:

答案 0 :(得分:1)

由于控件本身不支持此功能,您必须手动处理它。将方法附加到ValueChanged事件并检查值是否为其中之一。如果没有,则适当调整。

如果允许的值至少相差两个值,您可以轻松检查它是上升还是下降,并且不需要存储先前的值来确定它。

答案 1 :(得分:0)

由于这些值不是连续的,因此NumericUpDown可能不是此用例的正确控件。

如果你只有六打左右的值,那么组合框将是更好的选择。

如果你有更多,那么带有验证的文本框可能会更好。

如果您确实设置了NumericUpDown控件,那么就像其他人指出的那样,您需要挂钩ValueChanged事件并在那里进行验证。

答案 2 :(得分:0)

尝试:

Public Class Form1
' NumericUpDown1
'.Minimum = 1
'.Maximum = 64
'.Increment = 1
'.value = 4
Dim NumList() As Integer = {1, 2, 4, 8, 16, 32, 64} ' list of admitted values
Dim NumExValue As Integer = 4 ' put the default value on numericUpDown
Dim NumDoChange As Boolean = True ' used for not looping in changeValue event

Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged

    ' if the event is calling from this event (when set .value) do nothing
    If (NumDoChange = False) Then Exit Sub

    With NumericUpDown1
        Dim cv As Integer = .Value

        ' if no change (possible?) do nothing
        If (cv = NumExValue) Then Exit Sub

        ' if the value IS on array do nothing
        Dim ix As Integer = Array.IndexOf(NumList, cv)
        If (ix >= 0) Then
            NumExValue = cv
            Exit Sub
        End If

        ' if precedent value is 8 and up arrow pressed
        ' the current value is 9 so i search the index in array of
        ' value -1 and i take next element
        If (cv > NumExValue) Then ' up arrow
            ix = Array.IndexOf(NumList, cv - 1) + 1 ' get next element
            NumDoChange = False ' stop ValueChanged event 
            .Value = NumList(ix) ' here start a call to this event
            NumDoChange = True ' reset ValueChange event on
        End If

        ' the same but precedent element
        If (cv < NumExValue) Then ' down arrow pressed
            ix = Array.IndexOf(NumList, cv + 1) - 1
            NumDoChange = False
            .Value = NumList(ix)
            NumDoChange = True
        End If
        NumExValue = .Value
    End With
End Sub
End Class