質問

簡単にテストするためにこれを書きました

私の設定が保存されないのはなぜですか?初めてこれを実行すると、3(古い)/ 3(現在の)要素があります。2 回目は 3(old)/5(current) を取得し、3 回目は 5(old)/5(current) を取得します。

アプリを閉じると設定が完全​​に消えてしまいます。実行するとまた3になります。アプリには何も変更を加えませんでした。設定が保存されないのはなぜですか

    private void button2_Click(object sender, EventArgs e)
    {
        MyApp.Properties.Settings.Default.Reload();
        var saveDataold = MyApp.Properties.Settings.Default.Context;
        var saveData = MyApp.Properties.Settings.Default.Context;
        saveData["user"] = textBox1.Text;
        saveData["pass"] = textBox2.Text;
        MyApp.Properties.Settings.Default.Save();
    }
役に立ちましたか?

解決

データをコンテキストに置くのではなく、公開されたプロパティを使用する必要があります。

var saveData = MyApp.Properties.Settings.Default;
saveData.user = textBox1.Text;
saveData.pass = textBox2.Text;

コンテキスト

プロバイダーが設定を持続するときに使用できるコンテキスト情報を提供します

私の理解では、実際の設定値を保存するためには使用されません。

アップデート: Visual Studio の設定エディターを使用して強い型指定されたプロパティを生成したくない場合は、自分でコーディングできます。VS によって生成されたコードは次のような構造になっています。

    [UserScopedSetting]
    [DebuggerNonUserCode]
    [DefaultSettingValue("")]
    public string SettingName
    {
        get { return ((string)(this["SettingName"])); }
        set { this["SettingName"] = value; }
    }

Settings.Designer.cs ファイルを編集することで、プロパティを簡単に追加できます。

強い型指定されたプロパティを使用したくない場合は、 this[name] インデクサーを直接使用します。例は次のようになります。

    var saveData = MyApp.Properties.Settings.Default;
    saveData["user"] = textBox1.Text;
    saveData["pass"] = textBox2.Text;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top