自定义录入界面之一
本节的内容可以参考CaseStudy目录下的文件:自定义录入界面之一.Table
假定客户表已经输入所有的客户资料,订单表有一个客户ID列,我们可以利用列表项目来输入客户ID,也可以利用数据字典来输入,前者利用输入助手可以模糊筛选,后者则可以同时显示多列数据,但是显然两者都不够完美。能不能自己设计一个输入界面, 就像下图所示一样,做到既可以模糊查询,又可以显示多列数据呢:
完全可以,接下来我们就看看如何来实现。
1、首先在订单表新增一个窗口,窗口类型为模式,窗口插入一个TextBox和一个Table控件,Table控件的“作为副本”属性设置为True,“允许编辑”属性设置为False,并绑定到客户表。
2、将TextBox1的TextChanged事件代码设为:
Dim
txt As String = e.Form.Controls("TextBox1").Text
这样我们在文本框中输入任何内容,Table就会自动进行模糊筛选,显示客户ID、公司名称、地址、联系人这四列中,任何一列包括输入内容的行。
注意只有字符列才能使用Like进行模糊筛选,其它列类型是不可以的。
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
Tables("订单").Current("客户ID")
= tbl.Current("客户ID")
End
if
e.Cancel =
True
e.Form.Close()
End
If
这样在文本框中按上下箭头键,可以在Table中选择不同的行,按回车键会将选定行的客户ID输入到订单表的当前行中,并关闭窗口。
为了避免按上下箭头键的时候,文本框的光标会移动,下面的代码是必须的:
e.Cancel = True
4、将Table控件的DoubleClick事件设置为:
Dim
tbl As Table = Tables("窗口1_Table1")这样在窗口的Table中双击某行,即可将该行的客户ID输入到订单表的当前行中,并关闭窗口。
提示:由于Table的DoubleClick事件的e参数不包括Form属性,所以代码中不能使用e.Form来引用窗口,只能直接使用窗口名:Forms("窗口1")。
5、将订单表客户ID列的列表项目设为“|...”最后并将订单表的CellButtonClick事件设为:
If
e.Col.Name = "客户Id" Then下图是我们最终的设计效果,显然用这个窗口来输入客户ID,其便利性不是列表项目和数据字典能比拟的: