2010-01-08 41 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