2017-07-17 130 views
0

我在c#中創建了一個彈出窗口。我有一個按鈕,當用戶點擊按鈕時,彈出窗口。我的問題是,如果用戶多次點擊該按鈕,該窗口將被多次打開。一旦用戶打開窗口,如果用戶單擊按鈕,我不希望窗口再次打開。這有可能實現嗎?防止多次打開窗口

我使窗口彈出如下:

PopUp myPopUp = new PopUp(); 
myPopUp.show(); 

我使用WPF。

+3

你甚至沒有打擾告訴我們你正在使用的GUI API。顯而易見的答案是,保留一個跟蹤窗口是否已經打開的變量,並且不要再打開它。該變量甚至可以只是對窗口的引用,使其易於激活。我確定你想問的問題已經在Stack Overflow上得到了解答,但是你發佈的問題太模糊了,甚至無法知道哪個重複問題是正確的。 –

+0

我搜索了互聯網,無法找到我的問題的答案。我對此很陌生,所以如果我的問題含糊不清,我很抱歉,我將在未來的問題 – Anna

+0

中考慮到這一點,您也可以先禁用按鈕,然後彈出。 –

回答

5

如果用戶需要打開我將創建一個類成員彈出,保存到彈出和關閉彈出窗口設置參考null參考後進入主窗口:

PopPp myPopUp = null; 

private void OpenPopUp() 
{ 
    if(myPopUp == null) 
    { 
     myPopUp = new PopUp(); 
     myPopUp.Closed += (x,y) => { myPopUp = null; }; 
     myPopUp.Show(); 
    } 
} 

如果用戶不需要與主窗口進行交互,而彈出窗口只需使用ShowDialog即可。它會阻止任何輸入到主窗口,直到彈出窗口關閉:

PopUp myPopUp = new PopUp(); 
myPopUp.ShowDialog(); 
+0

我使用wpf而不是窗體,所以我不確定你的第一個例子會工作。 – Anna

+0

我已經編輯了我的答案來使用WPF。在提問時,您應該始終包含您用作標籤的UI框架。 –

+0

謝謝!有用。當我寫下未來的問題時,我會想到這一點。當我寫這篇文章時,猜測我太快了。 – Anna

2

最好的選擇是用ShowDialog代替Show,那麼用戶需要關閉彈出窗口才能再次點擊按鈕。這樣的代碼將是:

PopUp myPopUp = new PopUp(); 
myPopUp.ShowDialog(); 

否則你必須在這種情況下,你必須找到在哪個按鈕需要啓用回點使用buttonName.Enabled = !buttonName.Enabled;先禁用後點擊按鈕。

+0

非常感謝!使用ShowDialog解決了我的問題:)我感謝您的幫助! – Anna

+0

但現在我無法與我的主窗口進行交互。@ un-lucky – Anna

+0

@Anna簡單語言:ShowDialog默認爲最高級。除非您使用showDialog處理(關閉)已調用的窗口,否則無法執行任何操作。 –

0

像幸運說的那樣,最好的選擇是使用ShowDialog。但是,如果您不希望它成爲模態對話框,則可以使用我們的Application.Current.Windows,它爲您提供應用程序中的打開表單列表。然後在用代碼顯示之前檢查表單是否在列表中。事情是這樣的:

if(Application.Current.Windows.OfType<Window>() 
    .Where(x => x.Name == "myPopUpName").FirstOrDefault() == null){ 
    PopUp myPopUp = new PopUp(); 
    myPopUp.show(); 
} 

另外,如果你不想硬編碼形式的名稱,你可以做這樣的:

PopUp myPopUp = new PopUp(); 
if(Application.Current.Windows.OfType<Window>() 
    .Where(x => x.Name == myPopUp.Name).FirstOrDefault() == null){ 
    myPopUp.show(); 
} 

但因爲它創造了這會浪費一些資源新的表格副本,然後丟棄它,如果已經打開。

+0

我不使用窗體,但wpf。但是謝謝你! @RacilHilan – Anna

+0

然後你可以使用'Application.Current.Windows'而不是'Application.OpenForms'。看到我更新的答案。 –