Я использую приведенный ниже код для достижения желаемой функциональности: когда пользователь редактирует значение в конкретном элементе управления NumericUpDown и нажимает k
, K
, m
или M
, I хотите, чтобы текущая введенная сумма умножалась на 1000
. Я также хотел бы избежать любых исключений переполнения. Значения должны автоматически ограничиваться значениями minimum
и 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);
}
}