2011-08-05 1 views
0

내가 원하는 것은 Visual Studio의 WinForm 디자이너에서 일어나는 일과 다소 비슷하다. VS2010. 버튼을 놓고 화살표 키를 사용하면 오른쪽 키를 눌러 원하는 방향으로 5 픽셀 씩 이동합니다. 이제 Shift 또는 Ctrl 수정자를 사용하면 (미안하다는 것을 잊어 버렸습니다), 버튼은 한 번에 1 픽셀 씩 이동합니다.Shift/Ctrl/etc에 따라 WinForm NumericUpDown 컨트롤의 변수 증가 단계. 가 눌 렸음

C# WinForm 응용 프로그램에서 NumericUpDown 컨트롤을 사용하고 싶습니다. 기본 증분이 100.0이고 더 작은 증분이 10.0이라고 가정 해 보겠습니다. 더 작은 증분 (가능한 경우)은 1.0이 될 수 있습니다. 그걸 어떻게 할 수 있을지에 대한 암시가 있습니까?

희망 사항으로 저는 이것을 별도의 질문으로 물어볼 필요가 없기를 바랍니다. 나는 현재 값이 입력 된 값에 따라 달라지는 것을 생각하고 있습니다. 말하자면, 1 천억 ~ 1 천억 달러 정도의 금액을 입력 할 수 있습니다. 그런 다음 기본 값, 작고 작은 증분 값이 입력 된 값에 종속되기를 원합니다. 나는 정확한 공식을 스스로 알아낼 수있다.

답변

3

는 NumericUpDown에서 자신의 클래스를 파생하고 UpButton()와 DownButton() 메소드를 오버라이드 (override) : 다른 키를 다른 효과를주고

using System; 
using System.Windows.Forms; 

public class MyUpDown : NumericUpDown { 
    public override void UpButton() { 
     decimal inc = this.Increment; 
     if ((Control.ModifierKeys & Keys.Control) == Keys.Control) this.Increment *= 10; 
     base.UpButton(); 
     this.Increment = inc; 
    } 
    // TODO: DownButton 
} 

조정할 필요합니다.

2

이것은 다소 미숙하지만 다른 대답보다 조금 간단합니다 (더 좋지는 않음). 질문의 두 번째 부분에 대해서는 100/10/1을 현재 값을 기준으로 계산으로 바꾸면됩니다. .

가 (또는 무엇이든) 및하여 NumericUpDown (nUpDown)의를 keyDown 이벤트

private void nUpDown_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Control && e.KeyCode == Keys.Up) 
     nUpDown.Value += 10; 

    else if (e.Control && e.KeyCode == Keys.Down) 
     nUpDown.Value -= 10; 

    else if (e.Shift && e.KeyCode == Keys.Up) 
     nUpDown.Value += 1; 

    else if (e.Shift && e.KeyCode == Keys.Down) 
     nUpDown.Value -= 1; 
} 
+0

덕분에 100 기본 incrememnt을 설정'가'_KeyUp' 바람직 _KeyDown'입니까? –

+1

키를 누르면 키 입력이 반복되고 키를 놓으면 키 업만 실행됩니다. – tom502