2017-02-06 1 views
0

Window.xaml에 포함 된 wpf 응용 프로그램과 DataGrid이 포함 된 wpf 응용 프로그램에서 작업 중이며 그렇지 않은 경우 기사를 선택해야합니다. 기사 및 언론 "/", 나는 그가 가격을 편집 할 수있게해야한다 - 가격이 인 필드의 잠금을 해제하고 사용자가 완료되면 그는 엔터를 치고 그 후에 나는 그 기사에 대한 새로운 가격을 업데이트 할 수 있도록 체크를해야한다. .슬래시를 감지하고 조건이 만족되면 Enter 키를 확인하는 방법 WPF

우선,이 키에 맞는 OEM과 맞설 수 없기 때문에 "/"이 표시됩니다. 사용자가 키보드에서 언어를 변경할 때 발생할 수있는 일이 두려워요. 그래서 나는 이렇게했습니다.

private void Window_PreviewTextInput_1(object sender, TextCompositionEventArgs e) 
     { 
      if (e.Text == "/") 
      { 

        if (globalTemp != null) 
        { 
         txtPrice.IsEnabled = true; 

        } 
      } 

     } 

내가 가격을 변경하는 사용자에게 oportunity을 제공 한 후, 나는 키 입력에 물품 가격을 업데이트해야, 내가 본대로이에는 e.Key이 없기 때문에 어떻게 내가, 또한 입력 클릭이 조건 if (e.Text == "/") 후 확인할 수 있습니다 TextCompositionEventArgs e ...

편집 :

어쩌면 내가 감지하는 첫 번째 두 개의 이벤트가있을 수 있습니다 사실 때문에 단순히 "/"여기에 새 이벤트를 첨부 할 수 있으며, txtPrice의 잠금을 해제하고, 다른 하나 엔터를 누르면 업데이트됩니다. "/"감지하는 키 입력과 PreviewTextInput Enter 이벤트를 감지 할 PreviewKeyDown 이벤트를 처리

private void txtPrice_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Return) 
    { 
    // UPDATE PRICE HERE 
    } 
} 

고마워 건배

+0

당신이 넣어 했을 'KeyDown' 이벤트의 중단 점을 확인하고 "OEM"슬래시를 누를 때 이벤트 키 코드가 무엇인지 확인하십시오. – Abion47

+0

@ Abion47 어떻게 할 수 있습니까? "OEM"Fwd Slash 코드를 어떻게 확인할 수 있습니까? 내가 (e.Text == "/") {나는 "CODE"를 읽을 수있는 속성에 대해 무엇을해야합니까? –

+0

@ Abion47 내 질문에 대한 업데이트를 확인하십시오. –

답변

1

: 그녀의 이벤트는 다음과 같이 보일 수 있습니다.

모든 ENTER는 문자가 아니며 "/"는 키가 아니므로 두 이벤트를 별도로 처리하는 것이 좋습니다.

당신은 발견 할 경우 결합 + "/"키 조합은 "/"는 직전 누른 ENTER 눌렀는지 여부를 추적 유지하는 부울 필드 사용할 수 입력 :

private bool _slash = false; 
private void Window_PreviewTextInput_1(object sender, TextCompositionEventArgs e) 
{ 
    if (e.Text == "/") 
    { 
     _slash = true; 
     e.Handled = true; 
     //... 
    } 
    else 
    { 
     _slash = false; 
    } 
} 

private void Window_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == System.Windows.Input.Key.Enter && _slash) 
    { 
     // "/" + ENTER was pressed... 
    } 
} 
+0

그건 정확히 내가 한 일이지만, "/"로 필드의 잠금을 해제 할 때, 내가 그걸보고 싶지 않아도 그 필드에 글자가 쓰여져 있는데, 왜냐하면 우리가 가격에 대해 이야기하고 있기 때문에, 그래서 나는 어딘가에 e.Handled = true를 써야한다고 생각한다. 비록 내가 그걸로 많은 경험을 가지고 있지 않다면 솔직히 말해서 나는 그게 무슨 일을하는지 알지 못한다. 그리고 내가 그렇게한다면, 나는 잠긴 필드에서 무엇이든 들어갈 수 없게 될 것이다. (그것 때문에 e.Handled = 사실 ..)이 친구를 어떻게 해결할 수 있습니까? :/그리고 Window_PreviewKeyDown 이벤트가 필요 없다고 생각하면 직접 unl에 첨부해야합니다. 들? –

+0

편집 된 답변에 따라 e.Text가 "/"인 경우에만 TextCompositionEventArgs의 Handled 속성을 true로 설정하십시오. – mm8

+0

네 e.Handled 속성은 매우 도움이되고 그는 일을 했어. 그래서 친구는 너의 경험에서 그 말에 대해 몇 마디 줄 수 있니, 왜 e.Handled가 처음 상태에있을 때 도움이되는지 이해할 필요가있어. 내 개인 무효 Window_PreviewTextInput_1의 시작과 그 후에 내 텍스트 상자에 아무것도 입력 할 수 없습니다 .. 그래서 친구가 우리에 대해 몇 마디 줘, 당신의 작품은 아주 좋은 친구 야! 그리고 정말 고마워! –

관련 문제