如何允许项目用户设置为List <string>?</string>类型

时间:2011-06-10 12:22:18

标签: c# app-config settings

我的应用程序当前使用用户设置系统(通过项目属性)来存储用户特定数据。我使用这些设置而不是写入/来自App.Config,因为我需要在ClickOnce更新其构建时保持数据。

现在我需要用户能够指定要存储在用户设置中的字符串列表。我已经处理了C#PropertyGrid中的设置,并且我已经验证了如果我设置MyPropertyGrid.SelectedObject = new List<string>(),它会给我一个合适的编辑器来编辑字符串列表。

不幸的是,当我转到Project Preferences - &gt;设置并单击浏览以获取类型,我无法选择列表或查找用于字符串列表的任何好类型。有没有人对如何在用户设置中存储字符串列表有任何建议?

3 个答案:

答案 0 :(得分:2)

当设计师不允许您选择类型时,您可以手动添加自己的设置。对于某些内置类型和许多自己的自定义类型,可能会发生这种情况。这是关于SO的类似问题的链接:

Why am I unable to select a custom Type for a setting from the same project/assembly as the settings file?

这里是答案的链接(在VB.NET中,但原则适用):

http://blog.coretech.dk/jgs/add-custom-data-type-structure-to-mysettings-in-vbnet-wpf/

答案 1 :(得分:1)

嗯......我可以在类型列表中看到System.Collections.Specialized.StringCollection。你为什么不用这个?

您可以在StringCollectionList<string>之间使用以下转换:

var stringList = stringCollection.Cast<string>().ToList();

var stringCollection = new StringCollection();
stringCollection.AddRange(stringList.ToArray());

答案 2 :(得分:0)

设计人员无法执行此操作,但您可以手动编辑设置文件。

问题是,VS允许在设置文件中默认序列化int []类型 - 它不允许您默认选择它。因此,创建一个具有所需名称的设置(例如SomeTestSetting)并使其成为任何类型(例如默认情况下为字符串)。保存更改。

现在转到项目文件夹并打开&#34; Properties \ Settings.settings&#34;带文本编辑器的文件(例如,记事本)或者您可以通过右键单击解决方案资源管理器中的&#34;在VS中打开它。 - &GT;属性 - &gt; Settings.settings&#34;,选择&#34;打开...&#34;然后选择&#34; XML Editor&#34;或&#34;源代码(文本)编辑器&#34;。在打开的xml设置中找到您的设置(它将如下所示):

<Setting Name="SomeTestSetting" Type="System.String" Scope="User">
  <Value Profile="(Default)" />
</Setting>

更改&#34;类型&#34;从System.String到List的参数。现在这部分将如下所示:

<Setting Name="SomeTestSetting" Type="System.Collections.Generic.List`1[System.String]" Scope="User">
  <Value Profile="(Default)" />
</Setting>