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


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

主题:自定义录入界面之二

帅哥,在线噢!
zhuxinhui
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

自定义录入界面之二

本节的内容可以参考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
图片点击可在新窗口打开查看
的值,如果转换另一个表时回来又可以时取当行对应的值,

不知需要在哪调整下


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111410 积分:567120 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/3/16 15:34:00 [只看该作者]

每一个步骤的代码都和帮助的实例代码比对一下。

或者上传具体实例测试

 回到顶部
帅哥,在线噢!
zhuxinhui
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

全部对比过了,查了半天

 回到顶部
帅哥,在线噢!
zhuxinhui
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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


图片点击可在新窗口打开查看此主题相关图片如下:5.gif
图片点击可在新窗口打开查看

帮我看看这个代码是否有问题,现在主要换行后更新不了值 ,TextBox1的值刷新不了
''根据打开当前表的表名而调用相对应表的列值
Dim lbl As WinForm.TextBox
lbl = e.Form.Controls("TextBox1")
If CurrentTable.name = "销项fa piao" Then
    lbl.value = Tables("销项fa piao").Current("销方名称")
ElseIf   CurrentTable.name  = "现金银行" Then
    lbl.value = Tables("现金银行").Current("对方帐户")
Else
   lbl.value = Tables("进项fa piao").Current("销方名称")
   

End If


 回到顶部
帅哥,在线噢!
zhuxinhui
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

解决了,这个代码放错事件了


 回到顶部