我正在使用下面的代码来实现我想要的功能:当用户正在编辑特定 NumericUpDown 控件中的值并按下k
、K
、m
或M
时,我希望当前输入的数量乘以1000
。我也希望避免任何溢出异常。这些值应自动上限为 aminimum
和 a maximum
。我不想使用if
语句,因为min
函数max
可用。但是,处理这种逻辑需要一些精神能量(适用min
于maximum
和适用max
于minimum
......什么?),我觉得我需要留下如下评论:'警告,这段代码很难阅读,但它有效'。这不是我应该写的那种评论。逻辑太简单了,不需要评论,但我找不到一种不言而喻的方式来表达它。有什么建议么?我可以使用控件本身的设置/方法来完成这项工作吗?
private void quantityNumericUpDown_KeyUp(object sender, KeyEventArgs e)
{
if (e.Control || e.Alt)
{
e.Handled = false;
return;
}
if (e.KeyCode != Keys.K && e.KeyCode != Keys.M)
{
e.Handled = false;
return;
}
e.SuppressKeyPress = true;
e.Handled = true;
this.Quantity *= OneThousand;
}
private decimal Quantity
{
get
{
return this.quantityNumericUpDown.Value;
}
set
{
// Sorry if this is not the most readable.
// I am trying to avoid an 'out of range' exception by clipping the value at min and max.
decimal valClippedUp = Math.Min(value, this.quantityNumericUpDown.Maximum);
this.quantityNumericUpDown.Value = Math.Max(valClippedUp, this.quantityNumericUpDown.Minimum);
}
}