2013-12-11 6 views
1

많은 컨트롤이있는 WinForms에 응용 프로그램이 있습니다. 이 컨트롤은 응용 프로그램의 설정을 나타내며 사용자는 버튼을 클릭하여이 설정을 저장할 수 있습니다.NumericUpDown 값이 잘못되었습니다.

최소 : 10 최대 : 60 단계 : 1

만약 민은 이러한 속성을 가지고 말할 수 있습니다 : 나는 (내가 민을 호출합니다) 제어 NumericUpDown에 문제를 해결하기 위해 노력하고

사용자가 값을 변경하려면 두 가지 방법이 있습니다. 화살표 (Num 오른쪽)를 클릭하거나 Num에 수동으로 값을 직접 입력하는 것입니다. 첫 번째 방법은 괜찮지 만 대부분의 사용자가 두 번째 방법을 사용하고 있으며 약간의 문제가 있습니다.

사용자가 예를 들어 1과 같이 간격을 벗어난 값을 입력하면 5로 입력을 계속할 수 있으므로 최종 값은 51이며 이는 간격 내에 있습니다. 그러나 값 1 다음에 타이핑을 멈 추면 그는 간격 (1)에서 값을 타이핑한다는 의미입니다. 그가 Num 중 어딘가를 클릭하면, 간격을 벗어나는 값이 자동으로 가장 가까운 허용 값으로 변경됩니다 (1의 경우 값은 10으로 변경됨).

하지만 그는 아마도이 자동 변경을 알지 못해서 어떻게 든 처리하고 잘못된 값을 입력했음을 알릴 것입니다. 그러나이 상황은 Num의 어떤 이벤트에서도 처리되지 않습니다. ValueChanged 이벤트에서 값을 읽으려고하면 올바르지 않은 값이 자동으로 변경된 값을 읽습니다.

나는 TextChanged 이벤트를 추가 할 수 있지만 어떤 잘못된 값 (5)을 입력하면 유효한 값 (1을 더하여 15가됩니다)으로 변경 될 수 있다는 문제점이 있습니다.

이 문제를 해결하는 방법에 대한 아이디어가 있으십니까? 나는 이것이 어리 석다는 것을 알고있다. 그러나 이것은 나에 의존하지 않는다. 나는 이것을해야한다. 그리고 나는 방법을 모른다.

답변

0

그래서이 내 솔루션입니다 허용 된 값으로의 자동 변경은 유효성을 검사하기 전이므로 자동으로 변경됩니다. TextChange 이벤트 유효성을 검사 한 후 잘못된 값 대신 새 값을 갖습니다.

LostFocus이 자동 변경되기 전에 값이 유효한지 쉽게 제어 할 수 있습니다.

1

Lost Focus를 사용하고 디자인 단계에서 최소값을 설정하는 대신 If 문을 사용하여 확인하십시오.

Private Sub Num_LostFocus(sender As Object, e As System.EventArgs) Handles Num.LostFocus 
    If Num.Value < 10 Then MsgBox("Number is incorrect") 
End Sub 

다른 방법으로 값을 최소로 변경했지만 결코 시도하지 않은 이벤트를 무시할 수있는 사용자 지정 컨트롤을 만들 수 있습니다.

내가 TextChanged 이벤트를 처리하고이 방법 안에 나는 그것의 tagtext를 할당 :

Private Sub NUDTextChanged() 
    Integer.TryParse(NUD.Text, NUD.Tag) 
End Sub 

: 그리고

Private Sub NUD_LostFocus() Handles NUD.LostFocus 
    If NUD.Tag < NUD.Minimum Or NUD.Tag > NUD.Maximum Then 
     ' show message 
    End If 
End Sub 

Validating 이벤트가 처리

+0

그러나 사용자가 화살표로 값을 설정하려면 어떻게해야합니까? 최소값과 최대 값이 설정되지 않은 경우이 화살표로 잘못된 값으로 쉽게 이동할 수 있습니다 ... – DanielH

+0

Num.ValueChanged를 사용하여 제한 범위 내에서 값을 유지합니다. – OSKM

관련 문제