2014-09-05 28 views
0

내 문제는 :C#에서 fflush()와 비슷한 것이 있습니까?

사용자가 주소를 검색 할 수 있습니다. 아무 것도 발견되지 않으면 사용자에게 메시지 상자가 표시됩니다. 그는 ENTER를 눌러 그것을 닫을 수 있습니다. 여태까지는 그런대로 잘됐다. SearchAddresses() 호출은 ENTER를 눌러 시작할 수도 있습니다. 그리고 이제 모든 ENTER (메시지 상자를 사라지게하기 위해)가 새로운 검색을 시작하기 때문에 사용자는 무한 루프에 있습니다. 여기

코드 숨김 :

private void TxtBoxAddress_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Enter) 
      btnSearch_Click(sender, e); 
    } 


private void queryTask_Failed(object sender, TaskFailedEventArgs e) 
    { 
     //throw new NotImplementedException(); 
     MessageBox.Show("*", "*", MessageBoxButton.OK); 
     isMapNearZoomed = false; 
    } 

그리고 여기 XAML 코드 :

<TextBox Background="Transparent" Name="TxtBoxAddress" Width="200" Text="" KeyUp="TxtBoxAddress_KeyUp"></TextBox> 

<Button Content="Suchen" Name="btnSearch" Click="btnSearch_Click" Width="100"></Button> 

가 어떻게 C#에서이 무한 루프를 처리 할 수 ​​있습니까?

+3

이 정확히 C에서 FFLUSH과 관련이있다 확실하지? – AnthonyLambert

+0

나는 당신의 질문이 충분히 명확하다고 생각하지 않습니다. 문안을 수정하고 문제에 대해 알지 못한다는 것을 명심하십시오. 또한 코드 일부가 누락 된 것 같습니다. – Krumia

+4

BtnSearch를 기본 단추로 설정하여 텍스트 상자 키 업 이벤트에 논리가없는 이유는 무엇입니까? –

답변

2

롤. 그게 웃기는 무한 루프. 많은 답변을.

전역 문자열 _lastValueSearched를 추가하십시오.

private string _lastValueSearched; 

private void TxtBoxAddress_KeyUp(object sender, KeyEventArgs e) 
    { 
    if (e.Key == Key.Enter && _lastValueSearched != TxtBoxAddress.Text) 
     { 
     //TxtBoxAddress.LoseFocus(); 
     btnSearch_Click(sender, e); 
     _lastValueSearched = TxtBoxAddress.Text; 
     } 
    } 


private void queryTask_Failed(object sender, TaskFailedEventArgs e) 
{ 
    //throw new NotImplementedException(); 
    MessageBox.Show("*", "*", MessageBoxButton.OK); 
    isMapNearZoomed = false; 
} 

따라서 첫 번째 내부자에 TxtBoxAddress를 입력하면 lastSearchValue가 새 검색 값이됩니다. 메시지 상자에서 Enter를 누르면 TxtBoxAddress 텍스트가 변경되지 않은 경우 if 문이 실행되지 않습니다.

대체적으로 TxtBoxAddres.LoseFocus()가 단독으로 작동 할 수도 있습니다. TextBox에서 포커스를 빼앗아 야하므로 사용자가 messageBox에 enter 키를 누르면 TextBox KeyDown이 실행되지 않아야합니다. 대신 KeyUp

0

사용 KeyPress 이벤트 :

private void textBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == 13) // handle 'Enter' key 
     MessageBox.Show("test"); 
} 
+2

예. 그냥 추가하고 싶습니다 : 문제는 msgbox가 keydown에서 닫히고 키를 놓을 때 포커스가 다시 텍스트 상자로 바뀌면 키가 눌려져 keyup 이벤트를 받는다는 것입니다. 하지만 기본 버튼을 사용하면 어쨌든 훨씬 깨끗한 해결책이 될 것입니다. – ths