我在尝试为c#中的NumericUpDown控件配置特定配置时遇到一些麻烦。
基本上,我已经看到我可以设置增量间隔,但我想根据点击的箭头(向上或向下)来管理增量间隔。我已检查控件的事件,但我没有找到每个箭头的事件。
基本上,我想实现一个控件,在不同的值下,增量是不同的。
从0.00到5.00增量为0.01,从5.00到20.00增量为0.04,依此类推
这可能吗?
注意:当valuechanged事件触发时,控件中最后一个值的历史值也很有用。这是否存在?
提前感谢任何评论或建议!
编辑:我编辑了这个,因为我没有正确解释,我猜。这就是原因,因为我想知道哪个箭头被按下,向上或向下。这就是我所拥有的,或多或少。我添加了所有范围,并使用Modulo除法进行了一些检查,以避免使用键盘而不是箭头直接在值字段中设置不正确的值。问题是,如果我使用向上箭头来通过限制,一切都OK。但是,如果我使用箭头,我会错过一步。
if (cuotaUno.Value >= 30M && cuotaUno.Value < 50M)
{
cuotaUno.Increment = 2M;
if (!((cuotaUno.Value % 2M) == 0))
{
cuotaUno.Value = cuotaUno.Value - (cuotaUno.Value % 2M);
}
}
if (cuotaUno.Value >= 50M && cuotaUno.Value < 100M)
{
cuotaUno.Increment = 5M;
if (!((cuotaUno.Value % 5M) == 0))
{
cuotaUno.Value = cuotaUno.Value - (cuotaUno.Value % 5M);
}
}
在这种情况下,如果值为100并且我单击它,它会直接转到90而不是95.但是,如果我在90并且我单击,它会正确地转到95和100。
答案 0 :(得分:2)
您可以使用NumericUpDown.ValueChanged事件和NumericUpDown.Increment属性来创建奇迹。
作为旁注,请检查NumericUpDown.Accelerations属性是否对您有所帮助,因为我不知道您对增量或加速度是否非常特别。
<强>更新强>
readonly decimal PART1 = 30M;
readonly decimal PART2 = 50M;
readonly decimal PART3 = 100M;
readonly decimal INC1 = 1M;
readonly decimal INC2 = 2M;
readonly decimal INC5 = 5M;
readonly decimal INC10 = 10M;
private void cuotaUno_ValueChanged(object sender, EventArgs e)
{
decimal val = cuotaUno.Value;
decimal inc = cuotaUno.Increment;
decimal rem;
if (val < PART1 && inc != INC1)
{
if (inc == INC2 && val == (PART1 -INC2))
val += (inc - INC1);
inc = INC1;
}
else if (val >= PART1 && val < PART2 && inc != INC2)
{
if (inc == INC5 && val == (PART2-INC5))
val += (inc - INC2);
inc = INC2;
rem = val % INC2;
if (rem != 0)
val -= rem;
}
else if (val >= PART2 && val < PART3 && inc != INC5)
{
if (inc == INC10 && val == (PART3-INC10))
val += (inc - INC5);
inc = INC5;
rem = val % INC5;
if (rem != 0)
val -= rem;
}
else if (val >= PART3 && inc != INC10)
{
inc = INC10;
rem = val % INC10;
if (rem != 0)
val -= rem;
}
cuotaUno.Increment = inc;
cuotaUno.Value = val;
}
答案 1 :(得分:1)
这不会起作用吗?
private void NumericUpDown1_ValueChanged(Object sender, EventArgs e)
{
if(NumericUpDown1.Value >= 0 && NumericUpDown1.Value < 5)
{
NumericUpDown1.Increment = 0.01;
}
if(NumericUpDown1.Value >= 5 && NumericUpDown1.Value < 20)
{
NumericUpDown1.Increment = 0.04;
}
}
答案 2 :(得分:0)
使用NuinerUpDown控件来控制自己的控件。
重写OnkeyDown方法,检查当前值并更改增量,然后调用基类的实现。
这就是我想要的。