2010-01-08 42 views
4

我創建了具有多個屬性的自定義用戶控件。一個指定我想讓控件訪問哪個數據庫。我希望能夠向控制檯的用戶顯示一個下拉列表,他可以從中選擇控件將與哪個數據庫進行交互。爲自定義控件創建有效屬性值的下拉列表

如何讓下拉菜單起作用?我可以得到默認值,但還沒有弄清楚如何獲得可選列表。

任何幫助都是有益的。

謝謝。

Marshall

回答

0

下面是我用它來創建自定義數據源爲我的組合框模板:

Private Class Listing 

    Private _List As New ArrayList 

    Public Sub Add(ByVal ItemNumber As Integer, ByVal ItemName As String) 

     _List.Add(New dataItem(ItemNumber, ItemName)) 

    End Sub 

    Public ReadOnly Property List() As ArrayList 
     Get 
      Return _List 
     End Get 
    End Property 

End Class 

Private Class dataItem 
    Private _ItemNumber As Integer 
    Private _ItemName As String 

    Public Sub New(ByVal intItemNumber As Integer, ByVal strItemName As String) 
     Me._ItemNumber = intItemNumber 
     Me._ItemName = strItemName 
    End Sub 

    Public ReadOnly Property ItemName() As String 
     Get 
      Return _ItemName 
     End Get 
    End Property 

    Public ReadOnly Property ItemNumber() As Integer 
     Get 
      Return _ItemNumber 
     End Get 
    End Property 

    Public ReadOnly Property DisplayValue() As String 

     Get 
      Return CStr(Me._ItemNumber).Trim & " - " & _ItemName.Trim 
     End Get 

    End Property 

    Public Overrides Function ToString() As String 

     Return CStr(Me._ItemNumber).Trim & " - " & _ItemName.Trim 

    End Function 

End Class 

這就是我如何加載:

ListBindSource = New Listing 

    Me.BindingSource.MoveFirst() 
    For Each Row As DataRowView In Me.BindingSource.List 
     Dim strName As String = String.Empty 
     Dim intPos As Integer = Me.BindingSource.Find("Number", Row("Number")) 
     If intPos > -1 Then 
      Me.BindingSource.Position = intPos 
      strName = Me.BindingSource.Current("Name") 
     End If 
     ListBindSource.Add(Row("Number"), strName) 
    Next 

    cboNumber.DataSource = ListBindSource.POList 
    cboNumber.DisplayMember = "DisplayValue" 
    cboNumber.ValueMember = "Number" 
    AddHandler cboNumber.SelectedIndexChanged, AddressOf _ 
      cboNumber_SelectedIndexChanged 

希望這有助於。要記住的一件事是,如果cboNumber具有已分配給SelectedIndexchanged事件的處理程序,則會遇到問題。所以不要創建一個默認事件。

0

我對你的問題有點困惑。

如果您的用戶控件包含一個DropDownList控件,只是初始化用戶控件的某處。

最簡單的方法是在用戶控件的Codebehind中,只需執行DropDownList.Items.Add()或任何添加項目的語法。

+0

我不是說在用戶控件本身中使用組合框。我正在討論在控件的屬性框中使用它。我有一個屬性,我想限制其有效值。我之前在屬性頁面中看到過下拉菜單,並且正在嘗試複製該行爲。 – Marshall 2010-01-08 15:56:10

3

你只需要將你自己的TypeConverter附加到你的財產。您將覆蓋GetStandardValuesSupportedGetStandardValues方法(也許還有GetStandardValuesExclusive)以返回要顯示的數據庫列表。

如果您是PropertyGrid和TypeConverter的新手,這裏是document

1

結果比我想象的要簡單。

我爲該屬性設置了一個枚舉,但在使用它的屬性類型時遇到了問題。說在班級之外是無法進入的。

然後我有一個'嘟嘟'的時刻,並將朋友的枚舉更改爲公共,然後我可以使用枚舉作爲屬性類型。因此,當我查看控件屬性的值時,枚舉值將在下拉列表中列出。

感謝所有回答。

馬歇爾

+0

如果知道如何在組合框中顯示建議值,那對我來說會非常困難。在我的情況下,我想從數據庫中提取它們。 – Larry 2010-02-03 08:59:06

+0

如果我想要一些動態值,那我該怎麼辦?值來自某些類文件,但我無法對其進行枚舉。 – Krunal 2010-02-15 11:54:50

+0

謝謝,你的回答幫了我很多! – Magnus 2011-08-18 15:21:38

相關問題