2012-02-27 26 views
0

我在尋找複製visual studio已爲我做的一些行爲:在設計器中有一個下拉列表,允許我選擇其他組件以相同的形式。創建下拉列表,讓您從Visual Studio窗體設計器中選擇當前窗體中的其他控件

請看下面的例子:一個表單和一個按鈕。

從表單中可以設置'OKButton'屬性。當您下拉對話框時,所有可能的按鈕在下拉列表中顯示爲可能的選項。

我有類似的東西,我想要一個文本框具有名爲「ServiceMember」的屬性。當你展開時,它將允許我從我的表單中所有類型爲「ServiceObject」的公共成員中進行選擇。

這是可能有這項工作在任何自動意義上?如果不是,我不知道如何用不在當前對象中的名稱填充組合框。他們是父母形式的成員?

回答

0

如果您試圖將其作爲設計師的一部分(通過標籤而不是問題文本中的任何內容推斷出來),那麼您的自定義控件上的任何公共屬性的屬性都是屬性類型IListSource應作爲選擇在物業設計師中進行表示。即:

[AttributeProvider(typeof(IListSource))] 
public object MyList { get; set; } 

列表選擇也是自動從枚舉產生 - 見How can I add a combobox in control designer properties for a WinForms custom control? - 但是這可能是在這種情況下,不再需要你了。

但是,這個列表的人口會有點痛苦 - 您可以使用Reflection來檢查主機控件/表單以查找從ServiceObject繼承的公共成員 - 例如,看到Check if a class is derived from a generic class或同樣可以轉換爲類型看,如果你得到一個非空返回:

ServiceObject potentialServiceObject = formMember as ServiceObject; 
if (potentialServiceObject != null) 
{ 
    // Add to list for dropdown 
} 
+0

我本來在標題設計師,有人編輯它了...... – greggorob64 2012-02-27 19:03:39

+0

它通常是不好的做法,有標題重複了標籤(我在「如何在C#中如何做X」等問題上見過很多迷你火焰),但是在對問題的描述中 - 如果是關於自定義控件設計器 - 則澄清那。 – kaj 2012-02-27 19:06:07

+0

使用反射來查看控件父項,然後瀏覽每個控件以查找正確的對象類型肯定會很痛苦,但它可能是我唯一的選擇。 – greggorob64 2012-02-27 19:06:49

相關問題