用ListView模拟下拉列表
本节学习如何用ListView模拟下拉列表。
为了便于学习本节的内容,可以先打开CaseStudy目录下的文件“ListView.Table”,并参考该文件名为“示例二十 五”的窗口。
这个窗口用ListView模拟了ComboBox、CheckedComboBox,并展示了如何在表中利用ListView输入多列数据。
我们只介绍如何模拟CheckedComboBox,其它内容请参考示例文件自行学习:
设计步骤:
1、新建一个名为“下拉窗口2”的窗口,窗口类型设置为“DropDownForm”
2、下拉窗口的AfterLoad事件代码为:
Dim
lvw As
WinForm.ListView
= e.Form.Controls("ListView1")
lvw.StopRedraw()
'暂停绘制
lvw.View
= ViewMode.SmallIcon
'显示模式为小图标
lvw.CheckBoxes
= True
For
Each dr
As DataRow
In DataTables("国家").DataRows
'从数据表中提取数据
Dim Key
As String =
dr("图标")
Dim r
As WinForm.ListViewRow
= lvw.Rows.Add()
'增加一行
lvw.Images.AddSmallImage(Key,
Key &
".ico")
'添加代表这个国家的小图标
r.ImageKey
= Key
'指定图标键值
r.Text =
dr("国家")
'指定行的标题
r.Name
= r.Text
'将行的名称设置为标题,也就是国家
Next
lvw.ResumeRedraw()
'恢复绘制
注意上面的代码, 不仅将国家作为行的标题,也将国家作为行的名称。
3、下拉窗口的DropdownOpening事件代码设置为:
Dim
lvw As
WinForm.ListView
= e.Form.Controls("ListView1")
Dim
ss As
String = e.Form.DropDownBox.Value
For
Each r
As WinForm.ListViewRow
In lvw.Rows
r.Checked
= False
Next
If
ss > ""
Then
Dim vals()
As String =
ss.Split(",")
For Each
val As
String In
vals
If
lvw.Rows.Contains(val)
Then
lvw.Rows(val).Checked
= True
End If
Next
End
If
这样打开下拉窗口后,能自动勾选已经输入的国家,注意这里巧妙通过国家(也就是行的名称)来来快速检索行。
4、确定按钮的代码设置为:
Dim
lvw As
WinForm.ListView
= e.Form.Controls("ListView1")
Dim
vls As
String =
""
For
Each vr
As WinForm.ListViewRow
In lvw.CheckedRows
vls =
vls & ","
& vr.Text
Next
e.Form.DropDownBox.Value
= vls.Trim(",")
e.Form.DropDownBox.CloseDropdown()
5、最后回到数据录入窗口,将对应的DropDownBox的下拉窗口属性设置为“下拉窗口2”