自定义录入界面之三

本节的内容可以参考CaseStudy目录下的文件:自定义录入界面之三.Table

这一节还是完成同样的任务,不过要更加“专业”一点,可以直接在单元格中输入筛选内容,进行模糊筛选,而不是在下拉窗口中:

设计步骤

一、设计下拉窗口

1、首先在订单表新增一个窗口,名称为"窗口1",窗口类型为"DropDownForm",窗口插入一个Table控件,Table控件的“作为副本”属性设置为True,“允许编辑”属性设置为False,并绑定到客户表。

2、将窗口的DropDownOpened事件代码设置为:

Dim txt As String = e.Form.DropDownBox.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
e.Form.DropDownBox.
Select()
'将输入焦点返回下拉列表框

这样下拉窗口显示后,会自动根据下拉列表框的内容,筛选出可能的客户,并将输入焦点返回到下拉列表框。

3、将Table控件的DoubleClick事件代码设置为:

Forms("窗口1").DropDownBox.CloseDropDown()

这样在下拉窗口双击某个客户,就会关闭下拉窗口。

4、将Table控件的KeyDown事件代码设置为:

If e.KeyCode = Keys.Enter Then
    Forms(
"窗口1").DropDownBox.CloseDropdown()
End
If

这样在下拉窗口中选择某个客户,按回车键,也会关闭下拉窗口。

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列
    If e.Col.DroppedDown = False '且下拉窗口没有打开
        e.Col.OpenDropDown()
'打开下拉窗口
   
End If
End
If

这样一旦用户在订单表的客户ID列输入内容,就会自动打开下拉窗口。

2、将订单表的ChangeEdit事件代码设置为:

If e.Col.Name = "客户ID" Then '如果编辑的是客户ID列
    If e.Col.DroppedDown Then '如果下拉窗口已经打开
       
Dim tbl As Table = Tables("窗口1_Table1")
        If
e.Text = "" Then
'如果内容为空
            tbl.Filter = ""
'显示所有客户
       
Else '否则根据输入内容进行模糊筛选
           
Dim txt As String = "'%" & e.Text & "%'"
            tbl.Filter =
"客户ID Like " & txt & " Or 公司名称 Like " & txt & " Or 地址 Like " & txt & " Or 联系人 Like " & txt
        End
If
   
End If
End
If

这样就能根据用户在客户ID列输入的内容,动态筛选出可能的客户。

3、将订单表的KeyDownEdit事件代码设置为:

If e.Col.Name = "客户ID" Then '如果编辑的是客户 ID列
   
If e.Col.DroppedDown Then '如果下拉窗口已经打开
       
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
       
End If
   
End If
End
If

这样用户在客户ID列输入内容的时候,可以按"上箭头"按键,选择上一个客户,按"下箭头"按键,选择下一个客户。

4、将订单表的ValidateEdit事件代码设置为:

If e.Col.DroppedDown Then '如果下拉窗口已经打开
    e.Col.CloseDropDown()
'则关闭下拉窗口
End If

这样用户在编辑过程中,按Tab键离开单元格的时候,能自动关闭下拉窗口

5、最后在项目事件AfterOpenProject事件中加入代码:

Tables("订单").Cols("客户ID").DropForm = "窗口1"


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