5단계: NumericUpDown 컨트롤에 대한 Enter 이벤트 처리기 추가
NumericUpDown 컨트롤에 숫자를 입력할 때 예기지 않은 동작이 발생할 수 있습니다.이 문제를 해결하려면 Enter 이벤트 처리기를 추가합니다.
NumericUpDown 컨트롤 동작을 살펴보려면
프로그램을 실행하고 게임을 시작합니다.NumericUpDown 합계 컨트롤에서 0 옆에 커서가 깜박이고 있어야 합니다.
3을 입력하면 30이 되고다시 5를 입력하면 350이 되었다가 잠시 후 100으로 변경됩니다.
이 문제를 해결하려면 먼저 무엇이 문제인지 알아야 합니다.즉, 3을 입력할 때 0이 사라지지 않은 이유는 무엇이고, 350이 100으로 변경되는 이유는 무엇이며, 잠시 지연되었다가 변경되는 이유는 무엇인지 알아야 합니다.
[!참고]
이 동작은 예기치 않은 동작으로 보일 수 있지만 그럴만한 이유가 있습니다.시작 단추를 클릭하면 단추의 Enabled 속성이 False로 설정되고 단추가 흐리게 표시되고 사용할 수 없게 됩니다.프로그램에서는 다음으로 가장 낮은 TabIndex 값을 가진 컨트롤, 즉 NumericUpDown 합계 컨트롤을 찾아서 포커스를 이 컨트롤로 이동합니다.Tab 키를 사용하여 NumericUpDown 컨트롤로 이동하면 커서가 자동으로 컨트롤의 시작 부분에 놓이게 되어 숫자를 입력하면 오른쪽이 아닌 왼쪽에서 입력됩니다.100으로 설정된 MaximumValue 속성보다 큰 값을 입력하면 자동으로 최대값으로 바뀝니다.
NumericUpDown 컨트롤에 대한 Enter 이벤트 처리기를 추가하려면
이 예기치 않은 동작이 발생하지 않도록 하고 프로그램을 사용하기 쉽게 만들려면 각 NumericUpDown 컨트롤에 대한 Enter 이벤트 처리기를 추가합니다.속성 대화 상자의 이벤트 페이지를 사용하여 answer_Enter라고 하는 NumericUpDown 합계 컨트롤에 대한 Enter 이벤트 처리기를 추가합니다.
속성 대화 상자
이 코드는 다음과 같습니다.
Private Sub answer_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sum.Enter ' Select the whole answer in the NumericUpDown control. Dim answerBox = TryCast(sender, NumericUpDown) If answerBox IsNot Nothing Then Dim lengthOfAnswer = answerBox.Value.ToString().Length answerBox.Select(0, lengthOfAnswer) End If End Sub
private void answer_Enter(object sender, EventArgs e) { // Select the whole answer in the NumericUpDown control. NumericUpDown answerBox = sender as NumericUpDown; if (answerBox != null) { int lengthOfAnswer = answerBox.Value.ToString().Length; answerBox.Select(0, lengthOfAnswer); } }
이 코드는 처음에는 복잡하게 보일 수 있지만 천천히 살펴보면 쉽게 이해할 수 있습니다.먼저 메서드의 맨 위를 살펴보면 object sender(Visual C#) 또는 sender As System.Object(Visual Basic)가 있습니다.이는 메서드 내에서 sender를 사용할 때마다 Enter 이벤트가 발생한 NumericUpDown 컨트롤이 참조됨을 의미합니다.따라서 메서드의 첫 번째 줄에서 해당 메서드가 단순히 개체가 아니라 NumericUpDown 컨트롤임을 명시적으로 지정합니다.모든 NumericUpDown 컨트롤은 개체이지만 모든 개체가 NumericUpDown 컨트롤은 아닙니다. 다음 줄에서는 answerBox가 개체에서 NumericUpDown 컨트롤로 성공적으로 변환(캐스팅)되었는지 여부를 확인합니다.실패할 경우 해당 값이 null(C#) 또는 Nothing(Visual Basic)일 수 있습니다.세 번째 줄에서는 NumericUpDown 컨트롤에 현재 표시된 답의 길이를 찾습니다.네 번째 줄에서는 답을 선택하도록 NumericUpDown 컨트롤에 지시합니다.이제 사용자가 이 컨트롤로 이동하면 이 이벤트가 발생하여 이 컨트롤로 하여금 답을 선택하도록 합니다.사용자가 입력을 시작하면 이전 답이 지워지고 새 답으로 바뀝니다.
이 이벤트 처리기가 추가된 후에는 Windows Forms 디자이너로 이동하여 다른 NumericUpDown 컨트롤을 선택합니다.속성 대화 상자의 이벤트 페이지로 이동하고 Enter 이벤트까지 아래로 스크롤한 다음 방금 추가한 이벤트 처리기를 선택합니다.
곱 및 몫 NumericUpDown 컨트롤에 대해 동일한 작업을 수행합니다.
프로그램을 저장하고 실행합니다.예기치 않은 동작이 더 이상 발생하지 않습니다.
계속하거나 검토하려면
다음 자습서 단계로 이동하려면 6단계: 빼기 문제 추가를 참조하십시오.
이전 자습서 단계로 돌아가려면 4단계: CheckTheAnswer() 메서드 추가를 참조하십시오.