Foxtable(狐表)用户栏目专家坐堂 → 下拉窗口问题


  共有1655人关注过本帖树形打印复制链接

主题:下拉窗口问题

帅哥哟,离线,有人找我吗?
cuicuibing
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:405 积分:3572 威望:0 精华:0 注册:2014/1/8 17:12:00
下拉窗口问题  发帖心情 Post By:2017/3/12 10:53:00 [只看该作者]

使用DropDownForm,设计字段的下拉窗口按照

一、设计下拉窗口

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")
    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")
    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"



取值后, 保存后。点击别的数据,显示集合已修改;可能无法执行枚举操作。我的窗口中,有几个table,是通过点击另一个table加载的数据。

[此贴子已经被作者于2017/3/12 11:10:49编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/3/12 20:20:00 [只看该作者]

 上传具体例子测试。

 回到顶部