2011-08-08 2 views
1

원하는 기능을 구현하기 위해 아래 코드를 사용하고 있습니다. 사용자가 특정 NumericUpDown 컨트롤에서 값을 편집하고 k, K, m 또는 M을 누르면 1000으로 현재 입력 한 값을 곱하기를 원합니다. . 오버플로 예외를 피하기를 바랍니다. 값은 자동으로 minimummaximum에 따라야합니다. minmax 기능을 사용할 수 있기 때문에 if 문을 사용하고 싶지 않았습니다. 하지만 그 논리를 처리하는 데 정신적 인 에너지가 필요합니다 (minmaximummax ~ 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); 
     } 
    } 

답변

0

이렇게 작성하면 updown 컨트롤의 최소값과 최대 값으로 처리하게됩니다.

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)); 
    } 
} 
+0

나는 이것에 대해 생각했다 ... 간결한 것이지만 동일한 문제가 없다 - 같은 줄에 너무 많은 분과 최대치가 있는가? 나는 의도를 즉시 얻는 것이 어렵다고 생각한다. –