2011-09-14 53 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

,因爲,直到對話框打開,事件排隊,依次調用,所以一旦對話框關閉,如果一個引發事件,對話框將直接打開,而不是被忽略 –

+0

不工作似乎掃描器爲我排隊,這是一個API設備問題。謝謝... –

0

如果要停止一切做任何事情,嘗試打開一個模式對話框,這將阻止你使用其它如果這是你需要和/或如果它的作品,那麼這個形式是開放的嗎?

3

您可以在收到掃描時斷開事件,並在您準備好時重新連接。

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

    // do work 

    barcode.Scanned += barcode_Scanned; 
} 
+0

試圖但不工作,它再次附加事件時,方法將立即再次啓動,如果掃描發生時,未連接... –

+0

@Arnaud F .:聽起來像你的掃描儀正在爲你排隊(在其他單詞,供應商特定的問題)。可能有一個額外的財產,它不這樣做。 –

+0

這就是我認爲的問題,因爲我嘗試了所有的事情,並且總是觀察到這種行爲......真是一團糟...... –

相關問題