2016-06-11 77 views
0

我有一个选项,当它打开时选择按钮的问题,我做错了什么?单击按钮一次

private Boolean buttonWasClicked = false; 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     buttonWasClicked = true; 



     if (buttonWasClicked == true) 
     { 
     new SettingsWindow().Show(); 
     var test = new SettingsWindow(); 
     test.Owner = System.Windows.Application.Current.MainWindow; 
     test.WindowStartupLocation = WindowStartupLocation.CenterOwner; 
     test.Top = this.Top + 20; 

     } 
     else { 

      buttonWasClicked = false; 
     } 


    }` 
+0

的Winform或ASP.NET的出色答卷?你试图做什么BTW? – Rahul

+0

在visual studio中使用WPF C# – Tjarda112

+0

您正在创建'SettingsWindow'的两个副本,您可能不想要这样的问题 –

回答

3

我会避免保留自己的标志变量并手动管理其设置。例如,如果用户关闭了窗口,那么如何更改该变量以允许再次打开SettingsWindow ?.在这个问题上有一个更强大的基于系统的方法。查看系统提供的信息将帮助您避免再次打开设置窗口,直到打开一个实例。

要检查是否已经有一个SettingsWindow的一个实例中打开,你可以使用系统的代码提供的信息是这样

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    // Check if, in the Application.Current.Windows collection 
    // there is at least one window of type SettingsWindow 
    SettingsWindow w = Application.Current.Windows 
            .OfType<SettingsWindow>() 
            .FirstOrDefault(); 

    if(w == null) 
    { 
     // No window of the type required, open a new one.... 
     w = new SettingsWindow(); 
     w.Owner = System.Windows.Application.Current.MainWindow; 
     w.WindowStartupLocation = WindowStartupLocation.CenterOwner; 
     w.Top = this.Top + 20; 
    } 

    // Show it NON MODALLY.... 
    w.Show(); 
} 

的调用Show立即返回(非模态),因此你的程序继续像往常一样,MainWindow仍然活跃。相反,如果你想使用模态方法,(也就是说,直到SettingsWindow打开,你的MainWindow中没有任何活动),你可以简单地创建SettingsWindow,设置它的Owner和最终的Position,最后调用ShowDialog(不要忘记以设置所有者属性)。通过这种方式,您的代码在ShowDialog中被阻止,并且不会返回,直到用户关闭刚打开的SettingsWindow实例。 (你可以删除所有上面的检查)

+0

谢谢!这也是我正在寻找的 –

0

很肯定这将永远是真正的 围棋与史蒂夫

buttonWasClicked = true; 
if (buttonWasClicked == true) 
{ 
    // this will execute every time 
} 
else 
{ 
    // this will never execute 
}