防止多次打开窗口

时间:2017-07-17 06:11:40

标签: c# wpf

我在c#中创建了一个弹出窗口。我有一个按钮,当用户点击按钮时,窗口会弹出。我的问题是,如果用户碰巧多次点击该按钮,该窗口将被多次打开。用户打开窗口后,如果用户单击按钮,我不希望再次打开窗口。这有可能实现吗?

我的窗口弹出如下:

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

我正在使用wpf。

3 个答案:

答案 0 :(得分:5)

如果用户在弹出窗口打开后需要访问主窗口,我会创建一个类成员,该成员保存对弹出窗口的引用,并关闭引用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(); 。在弹出窗口关闭之前,它将阻止对主窗口的任何输入:

listView

答案 1 :(得分:2)

最佳选择是使用ShowDialog代替Show,然后用户需要关闭弹出窗口才能再次点击该按钮。所以代码将是:

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

否则你必须在第一次点击后使用buttonName.Enabled = !buttonName.Enabled;禁用按钮,在这种情况下你必须找到需要启用按钮的点。

答案 2 :(得分: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();
}

但是这会浪费一些资源,因为它会创建表单的新副本,然后在已经打开的情况下将其丢弃。