2016-09-13 8 views
0

私は編集可能なComboBoxを持っています。ユーザがテキストを入力し、保存ボタンを押す。それらのテキストは文字列に変換されます。実行時にapp.configの新しいユーザー設定を作成する方法

app.configの新しいユーザー設定を文字列の名前で作成するには、実行時に必要です。 (私はこの部分が今働くと思う)。

次に、別のComboBoxの選択項目が設定に保存されます。 (オブジェクト参照が設定されていないエラー)。

プログラムの各コントロールの状態、チェックボックス、テキストボックスなどを保存するカスタムプリセットを作成します。

// Control State to be Saved to Setting 
Object comboBox2Item = ComboBox2.SelectedItem; 

// User Custom Text 
string customText = ComboBox1.Text; 

// Create New User Setting 
var propertyCustom = new SettingsProperty(customText); 
propertyCustom.Name = customText; 
propertyCustom.PropertyType = typeof(string); 
Settings.Default.Properties.Add(propertyCustom); 

// Add a Control State (string) to the Setting 
Settings.Default[customText] = (string)comboBox2Item; 

ここではエラーが発生します。

Settings.Default[customText] = (string)comboBox2Item; 

例外:スロー:「オブジェクト参照がオブジェクトのインスタンスに設定されていません。」

同じエラーで、文字列ではなくオブジェクトにComboBox1.Textを設定しようとしました。テキストと文字列もnullではありません。ここで

Object customText = ComboBox1.Text; 

は、私が何をしようとしているの視覚的だ Custom User Setting

+0

後に非常に次の行でなければなりませんProperties.Settings.Default.Save();はおそらく、設定を保存し、それをリロードする必要があります。コードで使用する多くの設定は、デザイナーから設定を変更したときにVisual Studioによって生成されるクラスを通じて行われます。設定ファイルを解析して手動で変更できるXML設定クラスがありますが、保存する前に変更を検証するXSDはありません。設定が無効な設定マーキングのためにアプリケーションが起動しない状態に変更される可能性があるので、注意してください。 – xtreampb

+0

@xtreampb私のコードを更新しました。私はそれがapp.configの設定を作成し、そのコードを実行したと思うが、設定に文字列を追加しようとすると同じエラーが発生する。 –

+0

'Settings.Default [customText]'が設定クラスにコンパイルされていないので、エラーがスローされていると思います。あなたのソリューションエクスプローラで、 'properties/settings.settings/settings.designer.cs'を展開すると、デフォルトのインスタンスにすべての項目が表示されます。設定を追加するときは、その設定を呼び出す前に、設定ファイルを保存してから再読み込みする必要があります。 – xtreampb

答えて

0

オリジナル回答:

は、私は、ファイルに新しい設定を追加しようとしていないが、私はしなければなりませんでしたそれを更新する。ここでは、ファイルに保存された変更を保存および取得するために使用するいくつかのコードを示します。私はそれが直接質問に答えるわけではありませんが、どのクラスを見て、使用するかについて正しい方向を指すべきであることを知っています。

私はいくつかの呼吸時間を取得したら、この質問に直接答えるように更新しようとします。

public static void UpdateConfig(string setting, string value, bool isUserSetting = false) 
    { 
     var assemblyPath = AppDomain.CurrentDomain.BaseDirectory; 
     var assemblyName = "AssemblyName"; 

     //need to modify the configuration file, launch the server with those settings. 
     var config = 
      ConfigurationManager.OpenExeConfiguration(string.Format("{0}\\{1}.exe", assemblyPath, "AssemblyName")); 

     //config.AppSettings.Settings["Setting"].Value = "false"; 
     var getSection = config.GetSection("applicationSettings"); 
     Console.WriteLine(getSection); 

     var settingsGroup = isUserSetting 
      ? config.SectionGroups["userSettings"] 
      : config.SectionGroups["applicationSettings"]; 
     var settings = 
      settingsGroup.Sections[string.Format("{0}.Properties.Settings", assemblyName)] as ClientSettingsSection; 
     var settingsElement = settings.Settings.Get(setting); 

     settings.Settings.Remove(settingsElement); 
     settingsElement.Value.ValueXml.InnerText = value; 
     settings.Settings.Add(settingsElement); 

     config.Save(ConfigurationSaveMode.Modified); 
     ConfigurationManager.RefreshSection("appSettings"); 

編集回答:

私は簡単にGoogle検索を行なったし、MSDNフォーラムに受け入れ答えを見つけました。 MSDN question。追加が有効になるには、プロパティクラスでsaveを呼び出す必要があります。データベーストランザクションを考えると、コミットを呼び出すまでは有効になりません。

それでは、あなたのコード内で欠落しているように見えることである:あなたをチェックせずに、あなたのSettings.Default.Properties.Add(propertyCustom);

+0

Properties.Settings.Default.Save();を追加しようとしましたが、設定に文字列を追加しようとしてもエラーが発生します。私は設定名が作成されたと思うが、私はそれに追加することはできません。私はより明確に私の質問を更新しました。 –

関連する問題