2011-09-14 3 views
1

특정 이벤트가 나타나면 ShowDialog를 사용하여 새 양식을 열려고합니다.이 대화 상자가 열려있는 동안 발생하는 모든 들어오는 유사한 이벤트를 무시/제거합니다.이벤트에서 하나의 양식 만 열기

가능합니까? 방법?

처럼 관리하려고하는 내 이벤트 방법은 다음과 같습니다

void barcode_Scanned(object sender, string value) 
{ 
    if(value.StartsWith("d") 
    { 
     // ShowDialog 
    } 
} 

이 시나리오 :

  • 바코드 스캔
  • otherForm.ShowDialog()
  • 바코드 스캔 -> 때문에 무시 이미 열린 대화 상자
  • 대화 상자가 이미 열렸으므로 바코드 스캔 -> 무시 됨
  • otherForm는
  • 바코드 스캔
  • otherForm.ShowDialog()를 폐쇄 -> 가능한 이전은

감사를 폐쇄하기 때문에!

답변

2

당신 단순히 변수 나 속성을 사용할 수 있도록 : 당신이 모달 대화 상자를 열어보십시오, 아무것도 다른 모든 것을 중지하려면

private bool isDialogOpen = false; 

void barcode_Scanned(object sender, string value) 
{  
    if(value.StartsWith("d") && !isDialogOpen) 
    { 
     isDialogOpen = true; 
     // ShowDialog    
     isDialogOpen = false; 
    } 
} 
+0

가 작동하지 않습니다 스캐너를 보인다 그것을 대기열에 넣으십시오, API 장치 문제입니다. 감사합니다 ... –

+0

을 무시할 수 있도록 이벤트, 큐에 순차적으로 호출 때문에 –

0

, 즉 다른 사용에서 당신을 막을 것 그 중 하나가 열려있는 동안 그것이 당신이 필요로하는 것이거나 그것이 작동한다면?

3

스캔을 수신하면 이벤트 연결을 끊고 준비가되면 다시 연결할 수 있습니다.

void barcode_Scanned(object sender, string value) 
{ 
    barcode.Scanned -= barcode_Scanned; 

    // do work 

    barcode.Scanned += barcode_Scanned; 
} 
대화 상자가 열릴 때까지 대화 상자가 폐쇄 일단 이벤트가 발생 된 경우, 대화 상자가 바로 열립니다 대신
+0

시도해 보았지만 작동하지 않습니다. 다시 이벤트를 연결할 때 연결되지 않은 상태에서 스캔이 발생하면 즉시 다시 시작됩니다. –

+0

@Arnaud F : 스캐너가 사용자를 위해 대기하고있는 것 같습니다 (다른 단어, 공급 업체 특정 문제). 그것을하지 않는 추가 재산이있을 수 있습니다. –

+0

그게 문제를 일으켰습니다. 왜냐하면 나는 모든 것을 시도했기 때문에 항상이 행동을 보았습니다. –

관련 문제