我在c#中创建了一个弹出窗口。我有一个按钮,当用户点击按钮时,窗口会弹出。我的问题是,如果用户碰巧多次点击该按钮,该窗口将被多次打开。用户打开窗口后,如果用户单击按钮,我不希望再次打开窗口。这有可能实现吗?
我的窗口弹出如下:
PopUp myPopUp = new PopUp();
myPopUp.show();
我正在使用wpf。
答案 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();
}
但是这会浪费一些资源,因为它会创建表单的新副本,然后在已经打开的情况下将其丢弃。