我在c#中創建了一個彈出窗口。我有一個按鈕,當用戶點擊按鈕時,彈出窗口。我的問題是,如果用戶多次點擊該按鈕,該窗口將被多次打開。一旦用戶打開窗口,如果用戶單擊按鈕,我不希望窗口再次打開。這有可能實現嗎?防止多次打開窗口
我使窗口彈出如下:
PopUp myPopUp = new PopUp();
myPopUp.show();
我使用WPF。
我在c#中創建了一個彈出窗口。我有一個按鈕,當用戶點擊按鈕時,彈出窗口。我的問題是,如果用戶多次點擊該按鈕,該窗口將被多次打開。一旦用戶打開窗口,如果用戶單擊按鈕,我不希望窗口再次打開。這有可能實現嗎?防止多次打開窗口
我使窗口彈出如下:
PopUp myPopUp = new PopUp();
myPopUp.show();
我使用WPF。
如果用戶需要打開我將創建一個類成員彈出,保存到彈出和關閉彈出窗口設置參考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();
最好的選擇是用ShowDialog
代替Show
,那麼用戶需要關閉彈出窗口才能再次點擊按鈕。這樣的代碼將是:
PopUp myPopUp = new PopUp();
myPopUp.ShowDialog();
否則你必須在這種情況下,你必須找到在哪個按鈕需要啓用回點使用buttonName.Enabled = !buttonName.Enabled;
先禁用後點擊按鈕。
像幸運說的那樣,最好的選擇是使用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();
}
但因爲它創造了這會浪費一些資源新的表格副本,然後丟棄它,如果已經打開。
我不使用窗體,但wpf。但是謝謝你! @RacilHilan – Anna
然後你可以使用'Application.Current.Windows'而不是'Application.OpenForms'。看到我更新的答案。 –
你甚至沒有打擾告訴我們你正在使用的GUI API。顯而易見的答案是,保留一個跟蹤窗口是否已經打開的變量,並且不要再打開它。該變量甚至可以只是對窗口的引用,使其易於激活。我確定你想問的問題已經在Stack Overflow上得到了解答,但是你發佈的問題太模糊了,甚至無法知道哪個重複問題是正確的。 –
我搜索了互聯網,無法找到我的問題的答案。我對此很陌生,所以如果我的問題含糊不清,我很抱歉,我將在未來的問題 – Anna
中考慮到這一點,您也可以先禁用按鈕,然後彈出。 –