Foxtable(狐表)用户栏目专家坐堂 → 自定义录入界面之一共用录入界面设置


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

主题:自定义录入界面之一共用录入界面设置

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


加好友 发短信
等级:八尾狐 帖子:2035 积分:6610 威望:0 精华:0 注册:2017/11/8 17:37:00
自定义录入界面之一共用录入界面设置  发帖心情 Post By:2019/2/3 22:49:00 [只看该作者]

电子档自定义录入界面之一第二点:将TextBox1的TextChanged事件代码,是否可以根据点击表不同而引用不同表当行某列的值,这句不知怎样加多个条件“tbl.Filter = "客户ID Like " & txt & " Or 公司名称 Like " & txt & " Or 地址 Like " & txt & " Or 联系人 Like " & txt ”

完全可以,接下来我们就看看如何来实现。

1、首先在订单表新增一个窗口,窗口类型为模式,窗口插入一个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、公司名称、地址、联系人这四列中,任何一列包括输入内容的行。
注意只有字符列才能使用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")
If tbl.Current IsNot Nothing Then
    Tables("订单").Current("客户ID") = tbl.Current("客户ID")
End If
Forms("窗口1").Close()

这样在窗口的Table中双击某行,即可将该行的客户ID输入到订单表的当前行中,并关闭窗口。
提示:由于Table的DoubleClick事件的e参数不包括Form属性,所以代码中不能使用e.Form来引用窗口,只能直接使用窗口名:Forms("窗口1")。

5、将订单表客户ID列的列表项目设为“|...”最后并将订单表的CellButtonClick事件设为:

If e.Col.Name = "客户Id" Then
    e.Cancel = True
    Forms("窗口1").Open()
End If

下图是我们最终的设计效果,显然用这个窗口来输入客户ID,其便利性不是列表项目和数据字典能比拟的:


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


加好友 发短信
等级:八尾狐 帖子:2035 积分:6610 威望:0 精华:0 注册:2017/11/8 17:37:00
  发帖心情 Post By:2019/2/3 23:08:00 [只看该作者]

搞定了

 

 


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


加好友 发短信
等级:八尾狐 帖子:2035 积分:6610 威望:0 精华:0 注册:2017/11/8 17:37:00
  发帖心情 Post By:2019/2/3 23:08:00 [只看该作者]

过年才有空搞这个,真不好意思

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


加好友 发短信
等级:八尾狐 帖子:2035 积分:6610 威望:0 精华:0 注册:2017/11/8 17:37:00
  发帖心情 Post By:2019/2/4 0:39:00 [只看该作者]

自定义录入界面打开后,文本可以根据不同表引用当行某列的值,但是双击窗口的某行时不能带到相对应的表,不知这个条件怎样设? 使用CurrentTable.name 都不行的???
Dim tbl As Table = Tables("P_Table1")
If tbl.Current IsNot Nothing Then
   'If CurrentTable.name = "B" And tbl.Current IsNot Nothing  Then
       'Tables("B").Current("C") = tbl.Current("A")
   'Else If   CurrentTable.name  = "现金银行" And tbl.Current IsNot Nothing 
        Tables("D").Current("C") = tbl.Current("A")
   'Else
   '    Tables("S").Current("C") = tbl.Current("A")
   'End If
End If
Forms("P").Close()

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/2/10 13:28:00 [只看该作者]

参考

 

http://www.foxtable.com/webhelp/scr/2893.htm

 

如果不用 droptable,那你在打开窗口之前,记录当前表信息,如

 

vars("当前表") = e.table


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


加好友 发短信
等级:八尾狐 帖子:2035 积分:6610 威望:0 精华:0 注册:2017/11/8 17:37:00
  发帖心情 Post By:2019/2/11 18:21:00 [只看该作者]

使用界面之二可以做到共用窗口


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/2/11 19:02:00 [只看该作者]

以下是引用zhuxinhui在2019/2/11 18:21:00的发言:

使用界面之二可以做到共用窗口


如果还有问题,做一个实例发上来测试。

 回到顶部