2011-07-27 35 views
1


我將從派生自UserControl的類中的對象添加到ComboBox控件中。這是非常有用的,因爲我可以直接從組合框訪問必要的控件。
這一切都正常工作除了所有ComboBox條目都是空字符串(使用selectedItem完全訪問後面的派生UserControls)...
ComboBox使用DropDownList作爲其下拉樣式 - 但更改不會修理它。C#:組合框中的項目是UserControls時出錯?

的最小工作示例顯示空字符串:

public class TestControl : UserControl { 
    public override string toString(){ 
     return "Example"; 
    } 
} 

... 
combobox.Items.Add(new TestControl()); 
... 

當我直接調用

combobox.Items.Add(new TestControl().ToString()); 

,該條目是 「實施例」。

這是ComboBox控件中的錯誤還是我做錯了什麼? 謝謝

+0

的WinForms? WPF? ASP.Net? – SLaks

+0

我確定它只是一個錯字,但它應該是帶有大寫'T'的'ToString'。 –

+0

嗨,這是Windows窗體。 – Sebastian

回答

3

奇怪的,應該工作。另一種方法是將組合框的DisplayMember屬性設置爲你的系統testControl屬性:

通常,在ComboBox對象的表示是由對象的ToString方法返回的字符串 。如果您希望 顯示對象的成員,請選擇通過將DisplayMember屬性設置爲 適當成員的名稱來顯示 的成員。

http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.items.aspx(備註部分)

+0

斯圖爾特鄧克爾德,困惑:非常感謝。我不幸得不到DisplayMember解決方法的工作:我首先設置DataSource屬性,然後將DisplayMember設置爲「名稱」。這是做這件事的正確方法嗎?我仍然得到空的條目。謝謝。 – Sebastian

+0

然後,您需要在名爲* name *的用戶控件類中創建一個屬性(只是一個簡單的getter/setter),該屬性返回要顯示的字符串。 –

+0

你可以在類中留下你的ToString()覆蓋,然後添加:public string name {get {return this.ToString(); }}' –