带有复选框的DropDown列表

时间:2009-09-29 13:04:02

标签: .net windows vb.net winforms

如何制作包含复选框的下拉列表? 我有一个Windows应用程序(vb.net)和checkboxlist控件不是真正的选项与我的表单上的可用空间。

感谢。

6 个答案:

答案 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)

创建此效果的最简单方法是使用三个控件 - 编辑,按钮(在编辑的右侧,带有下拉图标)和当前正在使用的复选框列表。

将复选框列表放在编辑下,使其宽度与编辑旁边的编辑和按钮相同,并使其不可见。现在,将按钮添加到按钮:

  1. 如果检查表不可见,则使其可见;如果可见,则使其不可见(即,翻转.Visible的值)。

  2. 调用代码以创建已检查内容的“汇总”版本,而不是在编辑中检查并显示它。例如,如果您的“下拉列表”包含颜色名称,您可能会让代码创建一个以逗号分隔的已选中颜色列表,并在编辑中显示该列表。

  3. 您可以更进一步,将复选框列表放入面板容器中,并在“下拉列表”中添加一些小按钮,以执行应用程序中适用的任何特殊功能(全部检查,取消选中所有,等等)。

答案 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

您可能希望根据字体大小调整上述文字值。