寻找整洁,直观,习惯的方法来剪辑我在NumericUpDown控件中设置的值,使用c#

本文关键字:控件 NumericUpDown 设置 使用 直观 习惯 方法 寻找 | 更新日期: 2023-09-27 18:04:46

我使用下面的代码来实现我想要的功能:当用户在特定的NumericUpDown控件中编辑一个值,并按下k, K, mM时,我希望当前输入的金额乘以1000。我还希望避免任何溢出异常。这些值应该自动达到minimummaximum的上限。我不想使用if语句,因为minmax函数是可用的。但是,处理这种逻辑需要一些精神能量(将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); 
        }
    }

寻找整洁,直观,习惯的方法来剪辑我在NumericUpDown控件中设置的值,使用c#

这样写,让上下控件的最小值和最大值为您处理。

private void ud_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.K ||
        e.KeyCode == Keys.M)
    {
        e.SuppressKeyPress = true;
        e.Handled = true;
        ud.Value = Math.Max(ud.Minimum, Math.Min(ud.Value * 1000, ud.Maximum));
    }
}