2

私は小さなプログラムに取り組んでおり、いくつかのコントロールの状態とプロパティを構成ファイルに保存したいと考えています。ただし、いくつかの理由により、「従来の」設定ファイルを使用したくありませんが、シリアル化するか、単に特定のファイルに保存します。

たとえば、window1 の TextBox1.Text を取得してシリアル化し、アプリの起動時に古い値を再利用できるようにします。たとえば、いくつかのチェックボックスについても同じことが言えます。

これはどのように行うことができますか?これは「学業」プロジェクトではありません。空き時間に C# をゼロから学んでいるからです。私はいくつかの方法を探しましたが、特にその目的のためにカスタムのシリアル化クラスを使用するか、Visual Studio の標準の .settings ファイルの設定を使用するため、単純に複雑すぎます。また、私は C# で作業しており、プログラムは MFC ではなく WPF を使用しています。

4

1 に答える 1

2

以前に、ビジュアル ツリーをたどって各項目を XML ファイルに保存することで、これに取り組みました。XML レイアウトはビジュアル ツリーを反映します。ツリーをリロードすると、XML ファイルをウォークしてデフォルト値をロードできます。

    private void ForEachControlRecursive(object root, Action<Control> action, bool IsRead)
    {
        Control control = root as Control;
        //if (control != null)
        //    action(control);

        // Process control
        ProcessControl(control, IsRead);

        // Check child controls
        if (root is DependencyObject && CanWeCheckChildControls(control))
            foreach (object child in LogicalTreeHelper.GetChildren((DependencyObject)root))
                ForEachControlRecursive(child, action, IsRead);
    }

ProcessControl基本的に、コントロールの種類ごとにスイッチがあり、特定のコントロールのカスタマイズされた機能にルーティングされます。

例えば:

    private void ProcessControl(TextBox textbox, bool IsRead)
    {
        //1. textbox.Name; - Control name
        //2. Text                 - Control property
        //3. textbox.Text  - Control value
        if (IsRead)
        {
                                    // Class that reads the XML file saving the state of the visual elements
            textbox.Text = LogicStatePreserver.GetValue(textbox).ToString();
        }
        else
        {
            LogicStatePreserver.UpdateControlValue(textbox, textbox.Text);
        }
    }
于 2010-02-20T00:55:52.563 に答える