如何制作包含复选框的下拉列表? 我有一个Windows应用程序(vb.net)和checkboxlist控件不是真正的选项与我的表单上的可用空间。
感谢。
答案 0 :(得分:4)
你必须得到所有者才能获得这种功能。
如果您的表单空间不足,我建议您首先查看是否可以重构GUI以使其更简单。
答案 1 :(得分:2)
我找到了一个更简单的解决方案,并且如果有人像我一样搜索可以使用它,我想我会发布它。我所做的是在我的表单上插入一个单列Listview,其中View设置为Detail模式,MultiSelect设置为True,Checkboxes设置为True。以下代码将允许列表下拉。由于我有多项选择,因此无需像在组合框中那样显示所选值,因此下拉列表显示为显示/隐藏列表的按钮。在下面的代码中,我将高度除以4,因为我的列表是静态的,这是我列表中有多少个复选框。如果您有动态列表,那么只需从Listview中读取项目数并使用它。您可能需要使用它来获得您想要的外观。以下是我使用的事件:
Dim iListHt As Integer 'Set global variable to save height of list
'Save initial height of list and then collapse it to a button
iListHt = lvList.Height
lvList.Height = CInt(iListHt / 4)
lvList.Columns(0).Text = "Display List"
Private Sub lvList_ColumnClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles lvList.ColumnClick
Dim iHt As Integer = lvList.Height
If (iHt < iListHt) Then
lvList.Height = iListHt
lvList.Columns(0).Text = "Hide List"
Else
lvList.Height = CInt(iHt / 4)
lvList.Columns(0).Text = "Display List"
End If
lvList.Refresh()
End Sub
Private Sub lvList_ItemChecked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ItemCheckedEventArgs) Handles lvList.ItemChecked
'Read values from list check boxes and update settings
UpdateSettings()
End Sub
当ColumnClick事件单击“显示/隐藏列表”按钮时会处理,而ItemChecked事件允许我处理需要响应复选框中的更改的任何内容。通过访问“lvList.Items(iRowNum).Checked”值来读取每个值,其中iRowNum是您要检查的行。希望这有助于下一个需要这样的人。
hground
答案 2 :(得分:1)
我怀疑你的问题可能会被编辑,因为目前还不是很清楚。我猜你想在表单上有一个下拉列表控件,但是当列表下拉时你有复选框作为其中的选项吗?如果是这样,我怀疑你可能正在查看一组自定义控件(Telerik控件将允许你模板化一个RadComboBox),但我认为没有任何标准控件允许这样做。
答案 3 :(得分:1)
创建此效果的最简单方法是使用三个控件 - 编辑,按钮(在编辑的右侧,带有下拉图标)和当前正在使用的复选框列表。
将复选框列表放在编辑下,使其宽度与编辑旁边的编辑和按钮相同,并使其不可见。现在,将按钮添加到按钮:
如果检查表不可见,则使其可见;如果可见,则使其不可见(即,翻转.Visible的值)。
调用代码以创建已检查内容的“汇总”版本,而不是在编辑中检查并显示它。例如,如果您的“下拉列表”包含颜色名称,您可能会让代码创建一个以逗号分隔的已选中颜色列表,并在编辑中显示该列表。
您可以更进一步,将复选框列表放入面板容器中,并在“下拉列表”中添加一些小按钮,以执行应用程序中适用的任何特殊功能(全部检查,取消选中所有,等等)。
答案 4 :(得分:0)
我找到了一篇关于如何做的CodeProject文章(更像是“已经制作”但至少我可以围绕代码进行操作并了解他是如何做到的) 我不知道我早些时候错过了什么。
这是link。
答案 5 :(得分:0)
为此目的使用ListView支持hground。我将尝试提供他的概念的改进版本。
Private Shared Sub Expand(lv As ListView)
Dim expandedHeight As Integer = 20 + (15 * lv.Items.Count)
lv.Height = expandedHeight
End Sub
Private Shared Sub Contract(lv As ListView)
Dim contractedHeight As Integer = 20
lv.Height = contractedHeight
End Sub
Private Sub uiIssuesStatusListView_GotFocus(sender As Object, e As System.EventArgs) _
Handles uiIssuesStatusListView.GotFocus, uiIssuesStatusListView.ColumnClick
Call Expand(uiThisListView)
End Sub
Private Sub uiIssuesStatusListView_LostFocus(sender As Object, e As System.EventArgs) _
Handles uiIssuesStatusListView.LostFocus, uiIssuesStatusListView.MouseLeave
Call Contract(uiThisListView)
End Sub
您可能希望根据字体大小调整上述文字值。