Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 带有复选框的下拉列表_.net_Windows_Vb.net_Winforms - Fatal编程技术网

.net 带有复选框的下拉列表

.net 带有复选框的下拉列表,.net,windows,vb.net,winforms,.net,Windows,Vb.net,Winforms,如何制作带有复选框的下拉列表? 我有一个windows应用程序(vb.net),而checkboxlist控件在我的窗体上没有可用空间 谢谢。要想获得这种功能,你必须先去看看 如果您的表单空间不足,我建议您首先查看是否可以重构GUI以使其更简单。我怀疑您的问题可能会被编辑,因为目前还不太清楚。我猜您希望表单上有一个下拉列表控件,但是当列表下拉时,您在其中有复选框作为选项?如果是这样,我怀疑您可能正在查看一组自定义控件(例如,这些控件将允许您对RadComboBox进行模板设置),但我认为没有任何

如何制作带有复选框的下拉列表? 我有一个windows应用程序(vb.net),而checkboxlist控件在我的窗体上没有可用空间


谢谢。

要想获得这种功能,你必须先去看看


如果您的表单空间不足,我建议您首先查看是否可以重构GUI以使其更简单。

我怀疑您的问题可能会被编辑,因为目前还不太清楚。我猜您希望表单上有一个下拉列表控件,但是当列表下拉时,您在其中有复选框作为选项?如果是这样,我怀疑您可能正在查看一组自定义控件(例如,这些控件将允许您对RadComboBox进行模板设置),但我认为没有任何标准控件允许这样做。

创建此效果的最简单方法是使用三个控件-一个编辑,一个按钮(位于编辑右侧,带有下拉图标)以及您现在使用的复选框列表

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

  • 如果复选框不可见,则使其可见;如果复选框可见,则使其不可见(即翻转.visible的值)

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


  • 你可以更进一步,将复选框列表放入一个面板容器中,并在“下拉列表”中添加一些小按钮,以执行应用程序中可能适用的任何特殊功能(全选、全选、任意)。

    我找到了一个更简单的解决方案,并认为如果像我这样搜索的人可以使用它,我会发布它。我所做的是在表单中插入一个单列Listview,其中View设置为Detail模式,MultiSelect设置为True,复选框设置为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
    
    Dim ilissht As Integer'设置全局变量以保存列表高度
    '保存列表的初始高度,然后将其折叠为按钮
    iListHt=lvList.Height
    lvList.Height=CInt(iListHt/4)
    lvList.Columns(0).Text=“显示列表”
    私有子lvList_ColumnClick(ByVal sender作为System.Object,ByVal e作为System.Windows.Forms.ColumnClickEventArgs)处理lvList.ColumnClick
    尺寸iHt为整数=lvList.Height
    如果(iHt
    ColumnClick事件在单击“显示/隐藏列表”按钮时处理,ItemChecked事件允许我处理需要响应复选框中更改的任何内容。通过访问“lvList.Items(iRowNum).Checked”值读取每个项目的值,其中iRowNum是要检查的行。希望这能帮助下一个需要这样东西的人


    hground

    支持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
    

    您可能需要根据字体大小或其他内容调整上述文字值。

    是的,我想创建一个下拉列表,用组合框填充,如excel 2007中的“过滤器”对话框。Buy it有点没用,我的应用程序的全部目的是练习和学习在vb中做一些事情。我倾向于在asp.net世界中工作,但以下内容是通过谷歌搜索找到的-也许其中一些会有代码可以帮助你学习,特别是,SO上的第一个线程看起来不错:如何为RadComboBox模板?使用这种方法(注意:不一定推荐),我会坚持使用下拉列表,但当下拉部分打开时,覆盖一个复选框列表。