在winform应用程序中将NumericUpDown Control的行为修改为NumericCyclic Control

时间:2014-06-16 06:30:03

标签: c# winforms numericupdown

我打算在winform应用程序中使用的NumericUpDown控件中实现以下行为。

当我们单击NumericUpDown控件的向下箭头键时,控件的值会减小,并且在随后的单击中,其值继续减小,直到达到最小值。之后,该值保持不变,以便进一步单击向下箭头键。对于单击NumericUpDown控件的向上箭头键,相反的行为也是如此,即在达到最大值之后,该值保持不变,以进一步单击控件的向上箭头。

我正在尝试实现以下行为:

  1. 达到最大值后,如果用户点击向上箭头键,则该值设置为控件的最小值。

  2. 达到最小值后,如果用户点击箭头键,则该值设置为控件的最大值。

2 个答案:

答案 0 :(得分:3)

对于NumericUpDown控制,这不是一个好的行为,但如果你想这样做, 您可以从NumericUpDown继承并覆盖UpButton()DownButton()喜欢这个

    public override void UpButton()
    {
        if (Value == Maximum)
            Value = Minimum;
        else
            base.UpButton();
    }

    public override void DownButton()
    {
        if (Value == Minimum)
            Value = Maximum;
        else
            base.DownButton();
    }

并使用该继承的控件而不是NumericUpDown

答案 1 :(得分:2)

如果你可以免除Tag,你可以这样做:

private void numericUpDown1_Click(object sender, EventArgs e)
{
    decimal old = numericUpDown1.Value;
    if (numericUpDown1.Tag != null) old = (decimal)numericUpDown1.Tag;

    if (old == numericUpDown1.Value && old == numericUpDown1.Maximum)
        numericUpDown1.Value = numericUpDown1.Minimum;
    else if (old == numericUpDown1.Value && old == numericUpDown1.Minimum)
        numericUpDown1.Value = numericUpDown1.Maximum;

    numericUpDown1.Tag = numericUpDown1.Value;
}

(更新了错误的旧答案)