2011-06-10 23 views
1

我的應用程序當前使用用戶設置系統(通過項目屬性)來存儲用戶特定的數據。我使用這些設置而不是從App.Config寫入/從App.Config寫入,因爲我需要數據在ClickOnce更新其構建時保留。如何讓項目用戶設置爲列表<string>?

現在我需要用戶能夠指定要存儲在用戶設置中的字符串列表。我已經處理了C#PropertyGrid中的設置,並且我已驗證如果設置了MyPropertyGrid.SelectedObject = new List<string>(),它會給我一個適當的編輯器來編輯字符串列表。

不幸的是,當我轉到項目首選項 - >設置並單擊瀏覽類型時,我無法選擇列表或找到任何用於字符串列表的好類型。有沒有人有任何建議如何在用戶設置中存儲字符串列表?

回答

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/

+0

我打算將其標記爲答案,因爲它提供了有關如何在用戶設置GUI中提供類型的良好鏈接。 – KallDrexx 2011-06-10 13:20:08

1

那麼......我可以在類型列表中看到System.Collections.Specialized.StringCollection。你爲什麼不用這個?

您可以使用下列轉換StringCollectionList<string>之間:

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

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

不知道我是如何錯過的。不幸的是,在嘗試了這個之後,屬性網格並不真的喜歡它們,因爲當我點擊添加一個新的時候,我得到了'沒有找到類型'System.String'的Constructor'。 : -/ – KallDrexx 2011-06-10 12:36:19

+0

不能使用'List '作爲屬性網格,並在保存之前將其轉換爲StringCollection? – 2011-06-10 12:38:59

+0

屬性網格直接掛鉤到「Properties.Settings.Default」對象。我想我可以創建一個DTO或中介類,只是爲屬性網格使用 – KallDrexx 2011-06-10 12:40:42

0

你是不是能夠由設計人員完成,但您可以手動編輯設置文件。

問題是,VS允許在設置文件中默認序列化int []類型 - 它只是不允許您默認選擇它。因此,創建一個具有所需名稱的設置(例如SomeTestSetting)並將其設置爲任何類型(例如默認情況下爲字符串)。保存更改。

現在轉到您的項目文件夾並使用文本編輯器(例如記事本)打開「Properties \ Settings.settings」文件或者您可以通過右鍵單擊解決方案資源管理器中的「 - >屬性 - > Settings.settings「,選擇」打開方式...「,然後選擇」XML編輯器「或」源代碼(文本)編輯器「。在打開的xml設置中找到您的設置(它看起來像這樣):

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

將「類型」參數從System.String更改爲List。現在這部分看起來是這樣的:

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