원하는 기능을 구현하기 위해 아래 코드를 사용하고 있습니다. 사용자가 특정 NumericUpDown 컨트롤에서 값을 편집하고 k
, K
, m
또는 M
을 누르면 1000
으로 현재 입력 한 값을 곱하기를 원합니다. . 오버플로 예외를 피하기를 바랍니다. 값은 자동으로 minimum
및 maximum
에 따라야합니다. min
및 max
기능을 사용할 수 있기 때문에 if
문을 사용하고 싶지 않았습니다. 하지만 그 논리를 처리하는 데 정신적 인 에너지가 필요합니다 (min
을 maximum
및 max
~ minimum
... 뭐라고 부릅니까?) 나는 경고문을 남길 필요가 있다고 느꼈습니다. '경고,이 코드는 어렵습니다. 읽지 만 작동합니다. ' 이것은 필자가 작성해야하는 주석이 아닙니다. 논리는 너무 간단해서 주석이 필요하지 않지만, 그것을 표현하는 자체적 인 방법을 찾을 수는 없습니다. 어떤 제안? 이 작업을 수행하기 위해 컨트롤 자체의 설정/메서드를 사용할 수 있습니까?C#을 사용하여 NumericUpDown 컨트롤에서 설정 한 값을 클립하기위한 깔끔하고 직관적 인 관용적 방법을 찾고 계십니까?
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);
}
}
나는 이것에 대해 생각했다 ... 간결한 것이지만 동일한 문제가 없다 - 같은 줄에 너무 많은 분과 최대치가 있는가? 나는 의도를 즉시 얻는 것이 어렵다고 생각한다. –