用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.ListViewRowlvw.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”


本页地址:http://www.foxtable.com/webhelp/topics/2876.htm