.net 带有复选框的下拉列表
如何制作带有复选框的下拉列表? 我有一个windows应用程序(vb.net),而checkboxlist控件在我的窗体上没有可用空间.net 带有复选框的下拉列表,.net,windows,vb.net,winforms,.net,Windows,Vb.net,Winforms,如何制作带有复选框的下拉列表? 我有一个windows应用程序(vb.net),而checkboxlist控件在我的窗体上没有可用空间 谢谢。要想获得这种功能,你必须先去看看 如果您的表单空间不足,我建议您首先查看是否可以重构GUI以使其更简单。我怀疑您的问题可能会被编辑,因为目前还不太清楚。我猜您希望表单上有一个下拉列表控件,但是当列表下拉时,您在其中有复选框作为选项?如果是这样,我怀疑您可能正在查看一组自定义控件(例如,这些控件将允许您对RadComboBox进行模板设置),但我认为没有任何
谢谢。要想获得这种功能,你必须先去看看
如果您的表单空间不足,我建议您首先查看是否可以重构GUI以使其更简单。我怀疑您的问题可能会被编辑,因为目前还不太清楚。我猜您希望表单上有一个下拉列表控件,但是当列表下拉时,您在其中有复选框作为选项?如果是这样,我怀疑您可能正在查看一组自定义控件(例如,这些控件将允许您对RadComboBox进行模板设置),但我认为没有任何标准控件允许这样做。创建此效果的最简单方法是使用三个控件-一个编辑,一个按钮(位于编辑右侧,带有下拉图标)以及您现在使用的复选框列表 将复选框列表放置在“编辑”下,使其宽度与“编辑”和“编辑”旁边的按钮相同,并使其不可见。现在,将代码添加到按钮以:
你可以更进一步,将复选框列表放入一个面板容器中,并在“下拉列表”中添加一些小按钮,以执行应用程序中可能适用的任何特殊功能(全选、全选、任意)。我找到了一个更简单的解决方案,并认为如果像我这样搜索的人可以使用它,我会发布它。我所做的是在表单中插入一个单列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模板?使用这种方法(注意:不一定推荐),我会坚持使用下拉列表,但当下拉部分打开时,覆盖一个复选框列表。