2016-06-11 129 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 
}