[英]A question about writing data to a custom section?
以下是我的課程,這要歸功於在以下位置找到的文章:
網址: Derik Whittaker
我的代碼:
public class FavsSection : ConfigurationSection
{
public override bool IsReadOnly()
{
return base.IsReadOnly();
}
public FavsSection() // default Constructor.
{ }
[ConfigurationProperty("Items", IsRequired=true)]
public FavouritesCollection FavsItems
{
get
{
return (FavouritesCollection)(base ["Items"]);
}
}
}
[ConfigurationCollection(typeof(FavouriteElement))]
public class FavouritesCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new FavouriteElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((FavouriteElement)(element)).ItemType;
}
public FavouriteElement this[int idx]
{
get
{
return (FavouriteElement)BaseGet(idx);
}
}
public override bool IsReadOnly()
{
return base.IsReadOnly();
}
}
public class FavouriteElement : ConfigurationElement
{
[ConfigurationProperty("id", DefaultValue = "", IsKey = true, IsRequired = true)]
public string ID
{
get
{
return ((string)(base["id"]));
}
set
{
base["id"] = value;
}
}
[ConfigurationProperty("path", DefaultValue = "", IsKey = false, IsRequired = false)]
public string Path
{
get
{
return ((string)(base["path"]));
}
set
{
base["path"] = value;
}
}
}
我的配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="FavouritesMenu" type="MyFileExplorer.FavsSection, MyFileExplorer" />
</configSections>
<FavouritesMenu>
<Items>
<add id="1" path="c:\foo" />
<add id="2" path="C:\foo1" />
</Items>
</FavouritesMenu>
</configuration>
如您所見,我正在嘗試將數據寫入名為“收藏夾菜單”的自定義部分。 我想我已經有了這個想法的基本要點,但是我不知道如何進行下一步……“ IsReadOnly”方法有什么作用嗎? 有人可以幫我填補空白嗎? 隨意重命名事物以便於閱讀? 我以為在尋求幫助之前會付出半點努力...
----------對Pike65的評論迷失了……無法將其寫入集合,因為它被設置為只讀。
我假設集合需要將IsReadOnly設置為false,並且需要一些輔助方法才能將數據添加到集合中? 這部分對我來說有點朦朧...
感謝您的閱讀,易卜拉欣
我一直在進行一些基本測試,並且“不出意外”……以上方法確實有效。 您只需要確保在要將數據傳遞到config部分時,默認情況下它們是只讀的。 因此,您需要重寫'isReadOnly()'方法,以便上面的代碼起作用。
因此,解決方案是上面的代碼確實有效……您只需要重寫一個額外的方法,即可訪問負責保存元素數據的集合,並通過您在該類中定義的屬性來操縱其內容。擴展或繼承自Configuration Element類。
更新:
我粘貼的上述代碼示例使您可以編輯自定義部分中配置文件中已經存在的內容。 為了添加一個新項目,例如如下所示:
FavsSection favconfig = (FavsSection)config.GetSection("FavouritesMenu");
ToolStripMenuItem menu = (ToolStripMenuItem)returnMenuComponents("favouritesToolStripMenuItem", form);
ToolStripItemCollection items = menu.DropDownItems;
for (int i = 0; i < items.Count; i++)
{
//favconfig.FavsItems[i].ID = i.ToString();
//favconfig.FavsItems[i].Path = items[i].Text;
favconfig.FavsItems[i] = new FavouriteElement()
{
ID = i.ToString(),
Path = items[i].Text
};
}
如您在上面所看到的,我實際上是向屬性“ favconfig.FavItems”返回的集合中添加一個新的“ FavouriteElement”對象。 為了做到這一點,一個屬性需要擴展以支持這一點。
public FavouriteElement this[int idx]
{
get
{
return (FavouriteElement)BaseGet(idx);
}
set
{
base.BaseAdd(value);
}
}
如“傑弗里·里希特”(Jeffrey Richter)所說的此索引器或參數屬性,需要像上面的代碼片段中所示實現其“設置”訪問器。 我將其粘貼在這里,因為花了很長時間才弄清楚,並且大多數代碼都是使用Derik Whittaker的文章中使用的模板進行更改的。 希望這將使其他編碼人員能夠實現類似的功能。
另一個解決方案是在將我的所有“ FavouriteElements”一起“套索”在一起的過程中,而不是簡單地“獲取”集合,您可以為相關屬性實現“設置”訪問器。 我沒有對此進行測試,但是我可能值得嘗試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.