5단계: NumericUpDown 컨트롤에 대한 Enter 이벤트 처리기 추가Step 5: Add Enter event handlers for the NumericUpDown controls

이 자습서의 5단계에서는 퀴즈 문제의 답을 좀 더 쉽게 입력할 수 있도록 Enter 이벤트 처리기를 추가합니다.In the fifth part of this tutorial, you'll add Enter event handlers to make entering answers for quiz problems a little easier. 이 코드에서는 퀴즈를 푸는 사람이 NumericUpDown 컨트롤을 선택하고 다른 값을 입력하는 즉시 각 NumericUpDown 컨트롤의 현재 값을 선택하고 지웁니다.This code will select and clear the current value in each NumericUpDown control as soon as the quiz taker chooses it and starts to enter a different value.

참고

이 항목은 기본 코딩 개념에 대해 설명하는 자습서 시리즈의 일부입니다.This topic is part of a tutorial series about basic coding concepts. 자습서에 대한 개요는 자습서 2: 시간이 지정된 수학 퀴즈 만들기를 참조하세요.For an overview of the tutorial, see Tutorial 2: Create a timed math quiz.

기본 동작을 확인하려면To verify the default behavior

  1. 프로그램을 실행하고 퀴즈를 시작합니다.Run your program, and start the quiz.

    더하기 문제의 NumericUpDown 컨트롤에서 0 옆에 커서가 깜박이고 있습니다.In the NumericUpDown control for the addition problem, the cursor flashes next to 0 (zero).

  2. 3을 입력하면 컨트롤에 30이 표시됩니다.Enter 3, and note that the control shows 30.

  3. 5를 입력하면 350이 나타나지만 잠시 후 100으로 변경됩니다.Enter 5, and note that 350 appears but changes to 100 after a second.

    이 문제를 해결하려면 먼저 무엇이 문제인지 알아야 합니다.Before you fix this problem, think about what's happening. 즉, 3을 입력했을 때 0이 사라지지 않는 이유와 350이 잠시 나타났다가 100으로 변경되는 이유가 무엇인지 알아야 합니다.Consider why the 0 didn't disappear when you entered 3 and why 350 changed to 100 but not immediately.

    이 동작은 예기치 않은 동작으로 보일 수 있지만 코드의 논리를 보면 그럴만한 이유가 있습니다.This behavior may seem odd, but it makes sense given the logic of the code. 시작 단추를 선택하면 단추의 Enabled 속성이 False로 설정되어 단추가 흐리게 표시되고 사용할 수 없게 됩니다.When you choose the Start button, its Enabled property is set to False, and the button appears dimmed and is unavailable. 프로그램에서는 현재 선택 항목(포커스가 있는 항목)을 TabIndex 값이 그 다음으로 가장 낮은 컨트롤(더하기 문제의 NumericUpDown 컨트롤)로 변경합니다.Your program changes the current selection (focus) to the control that has the next lowest TabIndex value, which is the NumericUpDown control for the addition problem. Tab 키를 사용하여 NumericUpDown 컨트롤로 이동하면 커서가 자동으로 컨트롤의 시작 부분에 놓이게 되어 숫자를 입력하면 오른쪽이 아닌 왼쪽에서 입력됩니다.When you use the Tab key to go to a NumericUpDown control, the cursor is automatically positioned at the start of the control, which is why the numbers that you enter appear from the left side and not the right side. 100으로 설정된 MaximumValue 속성 값보다 큰 값으로 숫자를 지정할 경우, 입력하는 숫자가 이 속성 값으로 대체됩니다.When you specify a number that's higher than the value of the MaximumValue property, which is set to 100, the number that you enter is replaced with the value of that property.

NumericUpDown 컨트롤에 대한 Enter 이벤트 처리기를 추가하려면To add an Enter event handler for a NumericUpDown control

  1. 폼에서 이름이 “sum”인 첫 번째 NumericUpDown 컨트롤을 선택한 다음, 속성 대화 상자에서 도구 모음의 이벤트 아이콘을 선택합니다.Choose the first NumericUpDown control (named "sum") on the form, and then, in the Properties dialog box, choose the Events icon on the toolbar.

    속성 대화 상자의 이벤트 탭에 폼에서 선택하는 항목에 대해 응답(처리)할 수 있는 모든 이벤트가 표시됩니다.The Events tab in the Properties dialog box displays all of the events that you can respond to (handle) for the item that you choose on the form. NumericUpDown 컨트롤을 선택했으므로 이 컨트롤과 관련된 모든 이벤트가 나열됩니다.Because you chose the NumericUpDown control, all of the events listed pertain to it.

  2. Enter 이벤트를 선택하고 answer_Enter를 입력한 다음, Enter 키를 선택합니다.Choose the Enter event, enter answer_Enter, and then choose the Enter key.

    속성 대화 상자Properties dialog box
    속성 대화 상자Properties dialog box

    sum NumericUpDown 컨트롤에 대한 Enter 이벤트 처리기를 추가하고 처리기 이름을 answer_Enter로 지정했습니다.You've just added an Enter event handler for the sum NumericUpDown control, and you've named the handler answer_Enter.

  3. answer_Enter 이벤트 처리기의 메서드에 다음 코드를 추가합니다.In the method for the answer_Enter event handler, add the following code.

    ''' <summary> 
    ''' Modify the behavior of the NumericUpDown control
    ''' to make it easier to enter numeric values for
    ''' the quiz.
    ''' </summary> 
    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);
        }
    }
    

    이 코드는 복잡하게 보일 수 있지만 차근차근 살펴보면 쉽게 이해할 수 있습니다.This code may look complex, but you can understand it if you look at it step by step. 먼저 메서드의 맨 위를 살펴보면 object sender(Visual C#) 또는 sender As System.Object(Visual Basic)가 있습니다.First, look at the top of the method: object sender in C# or sender As System.Object in Visual Basic. 이 매개 변수는 이벤트를 발생시킨 개체, 즉 이벤트 전송자를 참조합니다.This parameter refers to the object whose event is firing, which is known as the sender. 이 코드에서는 전송자 개체가 NumericUpDown 컨트롤입니다.In this case, the sender object is the NumericUpDown control. 따라서 메서드의 첫 번째 줄에서 해당 전송자가 단순히 일반 개체가 아니라 NumericUpDown 컨트롤임을 명시적으로 지정합니다.So, in the first line of the method, you specify that the sender isn't just any generic object but specifically a NumericUpDown control. 모든 NumericUpDown 컨트롤은 개체이지만 모든 개체가 NumericUpDown 컨트롤은 아닙니다. 이 메서드에서 NumericUpDown 컨트롤의 이름은 answerBox입니다. 이 이름은 sum NumericUpDown 컨트롤뿐 아니라 폼의 모든 NumericUpDown 컨트롤에 사용되기 때문입니다.(Every NumericUpDown control is an object, but not every object is a NumericUpDown control.) The NumericUpDown control is named answerBox in this method, because it will be used for all of the NumericUpDown controls on the form, not just the sum NumericUpDown control. 이 메서드에 answerBox 변수를 선언하기 때문에 변수 범위가 이 메서드로만 한정됩니다.Because you declare the answerBox variable in this method, its scope applies only to this method. 다시 말해 이 메서드 내에서만 이 변수를 사용할 수 있습니다.In other words, the variable can be used only within this method.

    다음 줄에서는 answerBox가 개체에서 NumericUpDown 컨트롤로 성공적으로 변환(캐스트)되었는지 여부를 확인합니다.The next line verifies whether answerBox was successfully converted (cast) from an object to a NumericUpDown control. 변환에 실패할 경우 변수 값은 null(C#) 또는 Nothing(Visual Basic)입니다.If the conversion was unsuccessful, the variable would have a value of null (C#) or Nothing (Visual Basic). 세 번째 줄은 NumericUpDown 컨트롤에 표시되는 답의 길이를 가져오고, 네 번째 줄은 이 길이를 기준으로 컨트롤의 현재 값을 선택합니다.The third line gets the length of the answer that appears in the NumericUpDown control, and the fourth line selects the current value in the control based on this length. 이제 퀴즈를 푸는 사람이 컨트롤을 선택하면 Visual Studio에서 이 이벤트를 발생시키고 현재 답이 선택됩니다.Now, when the quiz taker chooses the control, Visual Studio fires this event, which causes the current answer to be selected. 퀴즈를 푸는 사람이 다른 답을 입력하기 시작하면 이전 답이 지워지고 새 답으로 대체됩니다.As soon as the quiz taker starts to enter a different answer, the previous answer is cleared and replaced with the new answer.

  4. Windows Forms 디자이너에서 difference NumericUpDown 컨트롤을 선택합니다.In Windows Forms Designer, choose the difference NumericUpDown control.

  5. 속성 대화 상자의 이벤트 페이지에서 Enter 이벤트로 스크롤하여 행 끝의 드롭다운 화살표를 선택한 다음 방금 추가한 answer_Enter 이벤트 처리기를 선택합니다.In the Events page of the Properties dialog box, scroll down to the Enter event, choose the drop-down arrow at the end of the row, and then choose the answer_Enter event handler that you just added.

  6. product 및 quotient NumericUpDown 컨트롤에 대해 이전 단계를 반복합니다.Repeat the previous step for the product and quotient NumericUpDown controls.

  7. 프로그램을 저장한 후 실행합니다.Save your program, and then run it.

    NumericUpDown 컨트롤을 선택하면 기존 값이 자동으로 선택되고 다른 값을 입력하기 시작하면 기존 값이 지워집니다.When you choose a NumericUpDown control, the existing value is automatically selected and then cleared when you start to enter a different value.

계속하거나 검토하려면To continue or review