4

私はVisualC#2010を使用する初心者プログラマーです。動的に(実行時に)新しいSettingsPropertyを作成し、それをアプリケーションのSettings.Default.Propertiesコレクションに追加しようとしています(新しい設定)。これらのプロパティは基本的に、後で再読み込みするために保存したいユーザー定義のビュー(文字列に格納されている)です。以下のコードを使用してみましたが、機能していないようです。アプリケーションを閉じると、新しく作成および保存されたプロパティは失われます。

    private void button6_Click(object sender, EventArgs e)
    {
        string connectionText = maskedTextBox3.Text;
        string vusipsText = maskedTextBox2.Text;
        string chartText = maskedTextBox1.Text;

        string[] settingsArray = { connectionText, chartText, vusipsText };
        string saveSettings = String.Join(":", settingsArray);

        //configure new property
        SettingsProperty property = new SettingsProperty("kri");
        property.DefaultValue = saveSettings;
        property.IsReadOnly = false;
        property.PropertyType = typeof(string);

        property.Provider = Settings.Default.Providers["LocalFileSettingsProvider"];
        property.Attributes.Add(typeof(System.Configuration.UserScopedSettingAttribute), new System.Configuration.UserScopedSettingAttribute());

        Settings.Default.Properties.Add(property);

        //Properties.Settings.Default.Reload();

        Settings.Default.Save();
        ActiveForm.Close();
    }

この問題を回避するにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

コードは正常に見えますが、次にデータをロードするときに設定はプロパティを認識しません。(ロード時に)プロパティを再度定義すると、値が使用可能になります。これは、列挙型を保存するために使用するループからの作業サンプルです。

     If My.Settings.Properties(settingName) Is Nothing Then
        Dim p = New Configuration.SettingsProperty(settingName)
        p.Provider = My.Settings.Providers("LocalFileSettingsProvider")
        p.Attributes.Add(GetType(Configuration.UserScopedSettingAttribute), _
                                    New Configuration.UserScopedSettingAttribute())
        p.PropertyType = GetType(SampleEnum)
        My.Settings.Properties.Add(p)
        If My.Settings(settingName) Is Nothing Then
           My.Settings(settingName) = SampleEnum.DefaultValue
        End If
     End If

常に起動時にコードを実行してプロパティを作成し、初めて値も作成します。

于 2012-12-20T19:12:26.460 に答える