我创建了具有多个属性的自定义用户控件。一个指定我想让控件访问哪个数据库。我希望能够向控制台的用户显示一个下拉列表,他可以从中选择控件将与哪个数据库进行交互。为自定义控件创建有效属性值的下拉列表
如何让下拉菜单起作用?我可以得到默认值,但还没有弄清楚如何获得可选列表。
任何帮助都是有益的。
谢谢。
Marshall
我创建了具有多个属性的自定义用户控件。一个指定我想让控件访问哪个数据库。我希望能够向控制台的用户显示一个下拉列表,他可以从中选择控件将与哪个数据库进行交互。为自定义控件创建有效属性值的下拉列表
如何让下拉菜单起作用?我可以得到默认值,但还没有弄清楚如何获得可选列表。
任何帮助都是有益的。
谢谢。
Marshall
下面是我用它来创建自定义数据源为我的组合框模板:
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事件的处理程序,则会遇到问题。所以不要创建一个默认事件。
我对你的问题有点困惑。
如果您的用户控件包含一个DropDownList控件,只是初始化用户控件的某处。
最简单的方法是在用户控件的Codebehind中,只需执行DropDownList.Items.Add()或任何添加项目的语法。
你只需要将你自己的TypeConverter附加到你的财产。您将覆盖GetStandardValuesSupported和GetStandardValues方法(也许还有GetStandardValuesExclusive)以返回要显示的数据库列表。
如果您是PropertyGrid和TypeConverter的新手,这里是document。
结果比我想象的要简单。
我为该属性设置了一个枚举,但在使用它的属性类型时遇到了问题。说在班级之外是无法进入的。
然后我有一个'嘟嘟'的时刻,并将朋友的枚举更改为公共,然后我可以使用枚举作为属性类型。因此,当我查看控件属性的值时,枚举值将在下拉列表中列出。
感谢所有回答。
马歇尔
我不是说在用户控件本身中使用组合框。我正在讨论在控件的属性框中使用它。我有一个属性,我想限制其有效值。我之前在属性页面中看到过下拉菜单,并且正在尝试复制该行为。 – Marshall 2010-01-08 15:56:10