Har ett litet problem där jag inte får kläm på hur man lägger till värden i settingsfiler runtime. Jag har en applikation som dels läser fasta värden från user.config dessa har jag satt upp i editorn och är inga problem att läsa och ändra med "My.Settings.rubrik = nytt värde", sen finns det en del av programmet som ska spara sökvägar från en listbox. Hur tar man bort och lägger till nya värden när programmet är igång? Nu kanske jag är ute och cyklar, men är dom inte "read-only"? Du kanske skulle använda någon .ini-fil istället för detta ändamål? Det verkar inte bättre än att det helt enkelt inte går att utföra. Enligt hjälpen så är User.config read/write medans App.config är endast läsbar och det stämmer, det går att ändra värden runtime i User.config. Dock finns inga funktioner för att lägga till helt nya värden. Lite B kan man tycka då det ändå är en vanlig XML fil som skapas. Har grejat med Propertys och annat utan att lyckas klämma in nya värden. Ger upp och använder en ordinär XML istället. Inget är omöjligt påstås det och där är ju svaret, Tackar! :) Hur lägga till värden i user.config fil
'Hur ta bort tidigare sparade sökvägar?
'Hur spara nya sökvägar
Dim lstItem As New ListViewItem
For Each lstItem In lstDatabases.Items
'Lägg till nytt värde i user.config från lstItem
NextSv: Hur lägga till värden i user.config fil
Sv:Hur lägga till värden i user.config fil
Sv: Hur lägga till värden i user.config fil
public class MyConfig : ConfigurationSection
{
public MyConfig()
{
Items = new ItemCollection();
}
[ConfigurationProperty("items")]
public ItemCollection Items
{
get { return (ItemCollection)this["items"]; }
set { this["items"] = value; }
}
}
public class MyItem : ConfigurationElement
{
[ConfigurationProperty("someText")]
public string SomeText
{
get { return (string)this["someText"]; }
set { this["someText"] = value; }
}
[ConfigurationProperty("someNumber")]
public int SomeNumber
{
get { return (int)this["someNumber"]; }
set { this["someNumber"] = value; }
}
[ConfigurationProperty("key", IsRequired = true)]
public string Key
{
get { return (string)this["key"]; }
set { this["key"] = value; }
}
}
public class ItemCollection : ConfigurationElementCollection
{
private const string ELEMENTNAME = "item";
public override ConfigurationElementCollectionType CollectionType
{
get
{
return ConfigurationElementCollectionType.AddRemoveClearMapAlternate;
}
}
protected override string ElementName
{
get { return ELEMENTNAME; }
}
protected override bool IsElementName(string elementName)
{
return elementName == ELEMENTNAME;
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((MyItem)element).Key;
}
protected override ConfigurationElement CreateNewElement()
{
return new MyItem();
}
public override bool IsReadOnly()
{
return false;
}
public void Add(MyItem item)
{
BaseAdd(item);
}
}
/* usage: */
var cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoaming);
var minSuperConfig = (MyConfig)cfg.Sections["EnNyConfig"];
if (minSuperConfig == null)
{
minSuperConfig = new MyConfig();
minSuperConfig.SectionInformation.AllowExeDefinition = ConfigurationAllowExeDefinition.MachineToLocalUser;
cfg.Sections.Add("EnNyConfig", minSuperConfig);
}
/// foreach(var foo in bar){
var enNyGrej = new MyItem();
enNyGrej.Key = (minSuperConfig.Items != null ? minSuperConfig.Items.Count : 0).ToString();
enNyGrej.SomeNumber = 42;
enNyGrej.SomeText = textBox1.Text;
minSuperConfig.Items.Add(enNyGrej);
/// }
cfg.Save();
Resulterande user.config:
<configuration>
<configSections>
<section name="EnNyConfig" type="Slask.Configuration.MyConfig, Slask, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowExeDefinition="MachineToLocalUser" />
</configSections>
<EnNyConfig>
<items>
<add someText="hgk" someNumber="42" key="0" />
<add someText="hgkhk" someNumber="42" key="1" />
<add someText="hgkhkhggg" someNumber="42" key="2" />
</items>
</EnNyConfig>
</configuration>
Se http://blog.dezfowler.com/2011/01/adding-collections-to-custom.html för mer info
Sv:Hur lägga till värden i user.config fil