自定义录入界面之三
本节的内容可以参考CaseStudy目录下的文件:自定义录入界面之三.Table
这一节还是完成同样的任务,不过要更加“专业”一点,可以直接在单元格中输入筛选内容,进行模糊筛选,而不是在下拉窗口中:
设计步骤
一、设计下拉窗口
1、首先在订单表新增一个窗口,名称为"窗口1",窗口类型为"DropDownForm",窗口插入一个Table控件,Table控件的“作为副本”属性设置为True,“允许编辑”属性设置为False,并绑定到客户表。
2、将窗口的DropDownOpened事件代码设置为:
Dim
txt As String = e.Form.DropDownBox.Text这样下拉窗口显示后,会自动根据下拉列表框的内容,筛选出可能的客户,并将输入焦点返回到下拉列表框。
3、将Table控件的DoubleClick事件代码设置为:
Forms(
"窗口1").DropDownBox.CloseDropDown()这样在下拉窗口双击某个客户,就会关闭下拉窗口。
4、将Table控件的KeyDown事件代码设置为:
If
e.KeyCode = Keys.Enter Then这样在下拉窗口中选择某个客户,按回车键,也会关闭下拉窗口。
5、将窗口的DropDownClosed事件代码设置为:
If
e.Selected
Then '如果选择了值
Dim tbl
As Table =
Tables("窗口1_Table1")
If tbl.Current
IsNot Nothing
Then
e.Form.DropDownBox.Value
= tbl.Current("客户ID")
If e.Form.DropTable
IsNot Nothing
Then '如果是通过表下拉的
e.Form.DropTable.FinishEditing()
Else
'如果是通过窗口下拉的
e.Form.DropDownBox.WriteValue()
End If
End If
End
If
这样关闭下拉窗口后,可以自动将选定客户的客户ID输入到下拉列表框中。
如果除了客户ID列,还要同时从客户表选择其它多列内容输入到订单表,可以将DropDownClosed事件代码改为:
If e.Selected
Then
'如果选择了值
Dim
tbl As
Table =
Tables("窗口1_Table1")
If tbl.Current
IsNot
Nothing
Then
e.Form.DropDownBox.Value =
tbl.Current("客户ID")
Tables("订单").Current("其它列1")
= tbl.Current("其它列1")
Tables("订单").Current("其它列2")
= tbl.Current("其它列2")
Tables("订单").Current("其它列3")
= tbl.Current("其它列3")
If e.Form.DropTable
IsNot Nothing
Then '如果是通过表下拉的
e.Form.DropTable.FinishEditing()
Else
'如果是通过窗口下拉的
e.Form.DropDownBox.WriteValue()
End If
End
If
End
If
二、设计订单表事件代码
下拉窗口设计完成,现在设计订单表的事件代码。
1、将订单表的KeyPressEdit事件代码设置为:
If
e.Col.Name = "客户ID" Then '如果编辑的是客户ID列这样一旦用户在订单表的客户ID列输入内容,就会自动打开下拉窗口。
2、将订单表的ChangeEdit事件代码设置为:
If
e.Col.Name = "客户ID" Then '如果编辑的是客户ID列这样就能根据用户在客户ID列输入的内容,动态筛选出可能的客户。
3、将订单表的KeyDownEdit事件代码设置为:
If
e.Col.Name = "客户ID" Then '如果编辑的是客户 ID列这样用户在客户ID列输入内容的时候,可以按"上箭头"按键,选择上一个客户,按"下箭头"按键,选择下一个客户。
4、将订单表的ValidateEdit事件代码设置为:
If
e.Col.DroppedDown
Then
'如果下拉窗口已经打开
e.Col.CloseDropDown()
'则关闭下拉窗口
End
If
这样用户在编辑过程中,按Tab键离开单元格的时候,能自动关闭下拉窗口
5、最后在项目事件AfterOpenProject事件中加入代码:
Tables
("订单").Cols("客户ID").DropForm = "窗口1"