2

ユーザーがオプションメニューを開くことができるWPF GUIがあります。オプション メニューが新しいウィンドウで開き、チェック ボックスが表示されます。ユーザーが「OK」ボタンを押すと、ウィンドウが閉じます。ただし、開いたときにどのチェック ボックスがオンになっていたかは覚えていません。どのボックスがチェックされ、どのボックスがチェックされていないかをプログラムが記憶できるようにするにはどうすればよいですか?

具体的に言うと、プログラムの実行中にどのボックスがチェックされているかを覚えておくだけで済みます。プログラム全体が終了した後、プログラムは記憶する必要はありません。

ありがとう!

メイン ウィンドウ Window1.XAML.CS の下のコードは次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace CartToolsPrototype1
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        //Exit
        private void Exit_Click(object sender, RoutedEventArgs e)
        {
            System.Environment.Exit(0);
        }

        //Options
        private void Options_Click(object sender, RoutedEventArgs e)
        {
            var newWindow = new Options();
            newWindow.Show();
        }
    }
}

子 Window Options.XAML.CS の下のコードは次のとおりです。これは最初の回答に基づいています。あなたが投稿したリンクを読みましたが、それは理にかなっています。ユーザーがチェックボックスをオンにしたときに変更する設定ファイルの条件があります。次に、設定ファイルに基づいてボックスがチェックされているかどうかを判断する条件がありますが、変更が反映されていないようです...

public partial class Options_Window : Window
    {
        public Options_Window()
        {
            InitializeComponent();

            //Checkbox1
            if (Properties.Settings.Default.OptionsBox1 == true)
                checkBox1.IsChecked = true;
            else
                checkBox1.IsChecked = false;
        }

        //Close Window
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        //Ask before downloading... - CHECKED
        private void checkBox1_Checked(object sender, RoutedEventArgs e)
        {
            Properties.Settings.Default.OptionsBox1 = true;
        }

        //Ask before downloading... - UNCHECKED
        private void checkBox1_Unchecked(object sender, RoutedEventArgs e)
        {
            Properties.Settings.Default.OptionsBox1 = false;
        }
4

3 に答える 3

6

設定を使用して、異なるウィンドウ/コントロール間でデータを共有したり、アプリケーションの終了/開始時にアプリケーション データを保存したりすることもできます。

.NET Framework を使用すると、アプリケーション実行セッション間で保持される値を作成してアクセスできます。これらの値は設定と呼ばれます。設定は、ユーザーの好みや、アプリケーションが使用する必要がある貴重な情報を表すことができます。たとえば、アプリケーションの配色に関するユーザー設定を格納する一連の設定を作成できます。または、アプリケーションが使用するデータベースを指定する接続文字列を格納することもできます。設定を使用すると、アプリケーションにとって重要な情報をコードの外部で永続化したり、個々のユーザーの設定を保存するプロファイルを作成したりできます。

任意のウィンドウで設定を保存できます。

Properties.Settings.Default.mySetting = true;
Properties.Settings.Default.Save();

任意のウィンドウで設定を読み取り/使用できます。

this.Property = Properties.Settings.Default.mySetting;
于 2013-07-10T18:16:38.530 に答える
0

実行時だけであれば、非常に簡単です。静的クラスを使用できます:

public static class MyState
{
    public static bool IsChecked1 { get; set; }
}

または、クラスのシングルトン インスタンス:

public class MyState   
{
   private static MyState _instance = new MyState();

   public static MyState Instance 
   {
      get { return _instance; }
   }

   private MyState() {}

   public bool IsChecked1 { get; set; }

}

ウィンドウが読み込まれると、MyClass のプロパティから状態を取得します。ウィンドウが閉じているときに、MyClass のプロパティを設定します。

Options.xaml.cs で:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    CheckBox1.IsChecked = MyState.IsChecked1;
}

private void Window_Closed(object sender, EventArgs e)
{
    MyState.IsChecked1 = CheckBox1.IsChecked;
}
于 2013-07-10T19:03:41.343 に答える