【发布时间】:2010-06-17 11:23:33
【问题描述】:
我在尝试为 c# 中的 NumericUpDown 控件配置特定配置时遇到了一些麻烦。
基本上,我已经看到我可以设置增量间隔,但我想根据单击的箭头(向上或向下)来管理增量间隔。我检查了控件的事件,但没有找到每个箭头的事件。
基本上,我想实现一个控件,在不同的值下,增量是不同的。
从 0.00 到 5.00 的增量为 0.01,从 5.00 到 20.00 的增量为 0.04,依此类推
这可能吗?
注意:当触发 valuechanged 事件时,最后一个值的控件中的历史值也很有用。这存在吗?
提前感谢您的任何意见或建议!!!
编辑:我对此进行了编辑,因为我没有正确解释它,我猜。这就是原因,因为我想知道按下了哪个箭头,向上还是向下。
这是我所拥有的,或多或少。我添加了所有范围,并使用模除法进行了一些检查,以避免使用键盘而不是箭头直接在值字段中设置不正确的值。问题是,如果我使用向上箭头通过限制,一切都很好。但是,如果我使用向下箭头,我会错过一步。
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。
【问题讨论】:
-
为什么你必须知道按下了哪个按钮?只需检查 NumericUpDown.ValueChanged 事件处理程序中的值,并相应地调整 NumericUpDown.Increment。
-
您将在达到 100 时将增量设置为 10M。现在当您返回时,它仍然是 10M,因此值现在变为 90M。当您将值从 50 减少时也会发生这种情况。它会变为 50。这是因为 (50-5) 是 45,并且它落在 30 到 49 的范围内,您已经检查了 2M 的整除性并减少了 1M,因此值为 44。检查我的解决方案以了解解决方法。
-
当心!做逻辑时不要随时设置 cuotaUno.Value。只需将其存储在变量中,对变量进行逻辑处理,最后将其设置为属性。否则会再次触发 ValueChanged 事件。
标签: c# numericupdown