views:

2740

answers:

5

c# windows forms: How do you create new settings at run time so that they are permanently saved as Settings.Default.-- values?

+3  A: 

Since the Settings class is generated at build time (or, actually, whenever you update the settings file from within the designer), you can't use this mechanism for dynamic scenarios. You can, however, add some collection or dictionary to the application settings and modify that dynamically.

OregonGhost
+1  A: 

How would you access the new settings that you have created? The point of the Visual Studio settings designer is that you can write code that uses these settings with compile-time checking of your code. If you want to dynamically create new settings for your app to use, you will also need to dynamically load them. For dynamic settings, you may want to look at the System.Configuration assembly, notably ConfigurationSection. You can create a custom configuration section with that, which you could use for dynamic setting addition/removal. You might use a ConfigurationCollection for that dynamic addition/removal.

INI files eh? Google turned up this INI library for .NET.

Chris Marasti-Georg
A: 

I see how what I wanted was the wrong idea. I'm porting a c++ app over to c# and it has a lot of ini file settings and I was looking for a shortcut to add them in. I'm lazy.

Then actually you can use the settings file generator, because the settings are not actually dynamic.
OregonGhost
A: 

What you could do is create a new registry key Name the new key "Your program settings".

RegistryKey ProgSettings = Registry.CurrentUser.OpenSubKey("Software,true); ProgSettings.CreateSubKey("Your Program settings");

ProgSettings.Close();

Now you can add Sring Identifiers and values.

RegistryKey ProgSettings = Registry.CurrentUser.OpenSubKey("Software\Your Program settings",true)

ProgSettings.SetValue("Setting Name",value) //store settings

string settings = ProgSettings.GetValue("Setting Name",false);// retreave settings

ProgSettings.DeleteValue("Setting Name",false);

Besure to close the registry key when you are done to avoid conflicts with other parts of your program that may write to the registry.

Many comercial software applications use these methods. stackoverflow has many examples about Writing and reading to the registry. This is much easyer the modifying the appconfig.xml file that is used when you create settings. Hope this helps GOD bless Regards

A: 

You can't add settings directly (at least not without editing the config XML at runtime), but you can fake it.

In my case, I had a group of identical custom controls on the form, and I wanted to store the runtime state of each control. I needed to store the state of each control, since each one had different data it.

I created a new StringCollection setting named ControlData and placed my own data in there. I then load the data from that list and use it to initialize my controls.

The list looks like this:

Box1Text=A
Box1List=abc;def;foo;bar;
Box2Text=hello
Box2List=server1;server2;

In my startup code, I read through the key/value pairs like this:

foreach (string item in Properties.Settings.Default.ControlData) {
  string[] parts=item.split('=');

parts[0] will have the key and parts[1] will have the value. You can now do stuff based on this data.

During the shutdown phase, I do the inverse to write the data back to the list. (Iterate through all the controls in the form and add their settings to ControlData.

Tom Wilson