none
keydown 이벤트 관련 질문 RRS feed

  • 질문

  • 안녕하세요.

    uwp app 개발 스터디 겸 간단한 계산기 앱을 개발하다가 질문이 생겨 포스팅합니다.

    키보드에서 숫자 및 사칙연산기호를 입력 가능하도록 다음과 같이 코드를 작성했습니다.

    //키보드 입력 이벤트 핸들러

    void App2::MainPage::NumKey_Down(Platform::Object ^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e)
    {
    if ((int)e->Key >= '0' && (int)e->Key <= '9')//number key  0~9까지
    txtOutput->Text += ((int)e->Key - '0').ToString();
    else if ((int)e->Key >= 96 && (int)e->Key <= 105)//numeric keypad의 0 ~9까지의 값
    txtOutput->Text += ((int)e->Key - 96).ToString();
    else if ((int)e->Key == 67)//'c' key 를 눌러 입력부분 초기화
    txtOutput->Text = "";
    }

    //좌측 변수 확정 및 연산 확정 핸들러(사칙 연산 키를 누를 때 실행)

    void App2::MainPage::ArithKey_Down(Platform::Object ^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs ^ e)
    {
    //좌측 변수 확정 및 연산자 확정을 위한 입력 키값 저장
    leftOperand = ConvertTextToInt(txtOutput->Text);
    int Op = (int)e->Key;
            //사칙 연산 확정(연산자는 enum class 사용)
    if (Op == 107)
    currentOp = ArithOp::PLUS;
    else if (Op == 109)
    currentOp = ArithOp::MINUS;
    else if (Op == 106)
    currentOp = ArithOp::TIMES;
    else if (Op == 111)
    currentOp = ArithOp::DIVIDE;

    //입력 초기화 
    txtOutput->Text = "";
    }

    이 코드를 compile 후 다음의 산식으로 테스트를 해 봤습니다.

    123 + 456 = 579

    테스트를 해 보니 123은 입력이 잘 되는데, + 키를 누르면 키 값을 인식 못하고 아예 먹통이 되네요...

    무엇이 잘못되었는지 지적 좀 부탁드립니다...

    2017년 5월 6일 토요일 오전 9:09

답변

  • 안녕하세요.

    방식을 조금 바꾸는게 좋을듯합니다.

    문자열로 모든 수식을 입력받은 다음에 [계산] 버튼이나 명령이 들어왔을 때 수식을 한번에 연산하는 방식으로 바꾸시면 좋을듯합니다.

    http://blog.naver.com/goldrushing/130146082168

    C#으로 예전에 만든 것이지만 여기 참고하세요.

    • 답변으로 표시됨 ohseihyung 2017년 11월 18일 토요일 오후 11:46
    2017년 5월 8일 월요일 오전 1:30