自定义录入界面之二
本节的内容可以参考CaseStudy目录下的文件:自定义录入界面之二.Table
上一节内容讲述了如何自定义录入界面来实现快速的模糊查询录入,使用的是模式窗口。
本节来完成同样的任务,不同的是使用下拉窗口来实现:
显然用这个下拉窗口来输入客户ID,其便利性不是列表项目和数据字典能比拟的,下面我们来讲述设计步骤:
1、首先在订单表新增一个窗口,窗口类型为"DropDownForm",窗口插入一个TextBox和一个Table控件,Table控件的“作为副本”属性设置为True,“允许编辑”属性设置为False,并绑定到客户表。
2、将TextBox1的TextChanged事件代码设为:
Dim txt As
String = e.Form.Controls("TextBox1").Text
Dim tbl As Table = Tables("窗口1_Table1")
If txt = "" Then
tbl.Filter = ""
Else
txt = "'%" & txt & "%'"
tbl.Filter = "客户ID Like " & txt & " Or 公司名称 Like " & txt &
" Or 地址 Like " & txt
& " Or 联系人 Like "
& txt
End
If
这样我们在文本框中输入任何内容,Table就会自动进行模糊筛选,显示客户ID、公司名称、地址、联系人这四列中,任何一列包括输入内容的行。
3、将TextBox1的KeyDown事件代码设为:
Dim tbl As
Table = Tables("窗口1_Table1")
If e.KeyCode =
Keys.Up Then
tbl.Position = tbl.Position - 1
e.Cancel = True
Elseif
e.KeyCode = Keys.Down Then
tbl.Position = tbl.Position + 1
e.Cancel = True
Elseif
e.KeyCode = Keys.Enter Then
If
tbl.Current IsNot Nothing
Then
e.Form.DropDownBox.Value = tbl.Current("客户ID")
End
If
e.Cancel = True
e.Form.DropDownBox.CloseDropDown()
End
If
这样在文本框中按上下箭头键,可以在Table中选择不同的行,按回车键会将选定行的客户ID输入到订单表的当前行中,并关闭下拉窗口
为了避免按上下箭头键的时候,文本框的光标会移动,下面的代码是必须的:
e.Cancel = True
4、将Table控件的DoubleClick事件设置为:
Dim tbl
As
Table =
Tables("窗口1_Table1")
If tbl.Current IsNot
Nothing
Then
e.Form.DropDownBox.Value
= tbl.Current("客户ID")
End
If
e.Form.DropDownBox.CloseDropDown()
这样在窗口的Table中双击某行,即可将该行的客户ID输入到订单表的当前行中,并关闭下拉窗口。
5、将窗口的DropDownClosed事件代码设置为:
If e.Form.DropTable IsNot
Nothing
Then
'如果是通过表下拉的
e.Form.DropTable.FinishEditing()
Else
'如果是通过窗口下拉的
e.Form.DropDownBox.WriteValue()
End
If
上面的不是必须的,加上这个代码的好处是下拉窗口关闭后,输入的数据即时生效。
6、在项目事件AfterOpenProject事件中加入代码:
Tables("订单").Cols("客户ID").DropForm =
"窗口1"
按照这个自定义入界面之二填写了代码后,在表列打开下拉窗口时,TextBox1的值始终都是第一次下拉时当行
此主题相关图片如下:qq截图20190316151831.gif
的值,如果转换另一个表时回来又可以时取当行对应的值,
不知需要在哪调整下