带查找功能的下拉目录树
本节内容可以参考CaseStudy目录下的文件:带查找功能的下拉目录树.Table。
本节内容的任务是设计一个下图所示的下拉窗口:
下面看一下如何设计。
设计下拉窗口
1、新建一个窗口,名为“窗口1”,窗口类型设置为“DropDownForm”。
2、分别插入一个TreeVew和Button控件。
3、窗口的AfterLoad事件代码设置为:
Dim
trv As
WinForm.TreeView
= e.Form.Controls("TreeView1")
trv.BuildTree("行政区域","省市|县市")
4、窗口的DropDownOpened事件代码设置为:
e.Form.DropDownBox.Select()
5、TreeView控件的NodeMouseClick事件代码设置为:
If
e.Node.Level
= 1 Then
'如果单击的是第二层节点
Dim tr
As Row =
Tables("客户").Current
Dim dr
As DataRow
= e.Node.DataRow
'获取生成此节点的DataRow
tr("省市")
= dr("省市")
tr("县市")
= dr("县市")
tr("区号")
= dr("区号")
tr("邮编")
= dr("邮编")
e.Form.DropDownBox.Value
= tr("县市")
e.Form.DropDownBox.CloseDropdown()
End
If
6、Button控件的Click事件代码设置为:
Dim
txt As
String = e.Form.DropDownBox.Text
If
txt = ""
Then
'如果下拉框没有输入内容,则无需查询
Return
End
If
Dim
trv As
WinForm.TreeView
= e.Form.Controls("TreeView1")
Dim
Start As
Integer
Dim
idx As
Integer = -
1
If
trv.SelectedNode
IsNot Nothing
Then
'获取当前节点位置.
Dim FullName
As String =
trv.SelectedNode.FullName
For i
As Integer
= 0 To
trv.AllNodes.count
- 1
If
trv.AllNodes(i).FullName
= FullName Then
Start =
i
Exit
For
End If
Next
End
If
For
i As
Integer = Start
+ 1 To
trv.AllNodes.count
- 1
'从当前节点的下一个节点开始查找
Dim nd
As WinForm.TreeNode
= trv.AllNodes(i)
If nd.Text.IndexOf(txt)
>= 0 Then
trv.SelectedNode
= nd
nd.EnsureVisible
idx =
i
'将找到的位置复制给变量idx
Exit For
End
If
Next
If
idx = -1
Then
'idx的值如果等于初始值-1,表示没有找到下一个符合条件的节点,那么从第一个节点开始重新查找.
For i
As Integer
= 0 To
Start - 1
Dim
nd As WinForm.TreeNode
= trv.AllNodes(i)
If nd.Text.IndexOf(txt)
>= 0 Then
trv.SelectedNode
= nd
nd.EnsureVisible
Exit
For
End
If
Next
End
If
trv.Select()
设计录入窗口
1、新建一个录入窗口
2、在窗口中DropDownBox,将其绑定到“县市”列。
3、将DropDownBox的下拉窗口属性设置为“窗口1”
4、将DropDownBox的TextChanged事件代码设置为:
Dim
drp As
WinForm.DropDownBox
= e.sender
If
drp.DroppedDown
Then
'如果下拉窗口已经打开
Dim trv
As WinForm.TreeView
= Forms("窗口1").Controls("TreeView1")
If drp.Text
> "" Then
'如果内容不为空
For Each
nd As
WinForm.TreeNode
In trv.AllNodes
If
nd.Text.IndexOf(drp.Text)
>= 0 Then
trv.StopRedraw()
trv.SelectedNode
= nd
nd.EnsureVisible()
trv.ResumeRedraw()
Exit
For
End
If
Next
End
If
End
If
5、将DropDownBox的KeyPress事件代码设置为:
Dim
drp As
WinForm.DropDownBox
= e.Sender
If
drp.DroppedDown
= False '如果下拉窗口没有打开
drp.OpenDropDown()
'打开下拉窗口
End
If