2016-06-11 19 views
0

開いているときにボタンを一度選択するオプションに問題がありますが、何が間違っていますか?ボタンが1回クリックされました

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

WinフォームやASP.NETからの優秀な答えを Go]をtrueになりますかなり確信?あなたは何をしようとしていますか? – Rahul

+0

Visual StudioでWPFを使用するC# – Tjarda112

+0

あなたは 'SettingsWindow'の2つのコピーを作成していますが、そのようなことは望ましくありません –

答えて

3

自分のフラグ変数を保持し、手作業で設定を管理しないようにします。たとえば、ユーザーがウィンドウを閉じると、変数を戻してSettingsWindowを再び開くことができますか?この問題では、より堅牢なシステムベースのアプローチがあります。システム提供の情報を見ると、すでに1つのインスタンスが開かれるまで設定ウィンドウを2度開いてしまうのを避けるのに役立ちます。 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に何もアクティブでない場合)、単に設定ウィンドウを作成し、所有者と最終的にその位置を設定し、最後にShowDialogを呼び出すことができますOwnerプロパティを設定します)。このようにして、コードはShowDialogでブロックされ、ユーザーが開いたばかりのSettingsWindowインスタンスを閉じるまで戻りません。 (そして、あなたは取り外しができ、上記のすべてのチェック)

+0

ありがとう!それは私が探しているものです –

0

これは常にスティーブ

buttonWasClicked = true; 
if (buttonWasClicked == true) 
{ 
    // this will execute every time 
} 
else 
{ 
    // this will never execute 
} 
関連する問題