以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  vars变量  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=148265)

--  作者:cd_tdh
--  发布时间:2020/4/3 14:44:00
--  vars变量

老师,我独立窗口(添加到页签的),窗口打开后都定义变量了变量 vars("editTable") =e.Form.TableName

后面录入窗口(或是审核窗口-通用的)用的模式窗口,可以直接用vars("editTable")

当我打开多个页签时,vars("editTable") 变量会出现混淆情况,这种有什么方法解决呢?

[此贴子已经被作者于2020/4/3 14:44:42编辑过]

--  作者:有点蓝
--  发布时间:2020/4/3 14:48:00
--  
定义一个全局变量的字典,窗口名称做主键,表名称做值
--  作者:cd_tdh
--  发布时间:2020/4/3 15:13:00
--  

请老师指导一下具体怎么定义,怎么用?

 


--  作者:有点蓝
--  发布时间:2020/4/3 15:15:00
--  
好好学学编程基础



--  作者:cd_tdh
--  发布时间:2020/4/3 15:43:00
--  

老师,比如我全局代码定义:

Dim ty As New  Dictionary(Of String, String)

后面怎么来用呢?


--  作者:有点蓝
--  发布时间:2020/4/3 15:52:00
--  

全局代码定义:

public ty As New  Dictionary(Of String, String)


使用

 ty.add(e.Form.Name,e.Form.TableName)


--  作者:cd_tdh
--  发布时间:2020/4/3 17:29:00
--  

老师,还是没用来,来个实际的用法指导一下:比如我要分页加载:改怎么调用这个字典?

With DataTables( )
.LoadFilter = ""
.LoadPage = 0  \'加载第一页
.LoadTop = e.Form.Controls("ComboBox1").Value   \'每页20行
.LoadOver =  "序号" \'加载依据列
.Load()
.LoadPage = .TotalPages -1  \'加载最后一页数据
.Load()
e.Form.Controls("TextBox1").Value = .TotalPages & "/" & .TotalPages
End  With

[此贴子已经被作者于2020/4/3 17:29:43编辑过]

--  作者:有点蓝
--  发布时间:2020/4/3 17:38:00
--  
With DataTables(ty(e.Form.Name) )
--  作者:cd_tdh
--  发布时间:2020/4/7 9:04:00
--  

老师,窗口的afterload事件代码如下:

 

ty.add(e.Form.Name,e.Form.TableName)
msgbox(ty(e.Form.Name))
With DataTables(ty(e.Form.Name))
    .LoadFilter = ""

 

会报错提示:

 

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.1.19.19
错误所在事件:窗口,日常费用支付管理,AfterLoad
详细错误信息:
已添加了具有相同键的项。

 

 

窗口打开后,在另一个独立窗口调用代码如下:

Dim r As Row =Tables(ty(e.Form.Name)).Current
With Tables("审核意见表")
    .Filter = "[ID] = \'"& r("ID") &"\'"
    .Sort = "审核日期"

会报错提示:

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.1.19.19
错误所在事件:窗口,审核窗口,AfterLoad
详细错误信息:
给定关键字不在字典中。

[此贴子已经被作者于2020/4/7 9:16:27编辑过]

--  作者:有点蓝
--  发布时间:2020/4/7 9:22:00
--  
判断一下,如果添加过就不要重复添加了
if ty.ContainsKey(e.Form.Name)=false then ty.add(e.Form.Name,e.Form.TableName)

如果是在afterload里面使用,直接使用e.Form.TableName即可,完全看不出使用字典的必要
With DataTables(e.Form.TableName)
    .LoadFilter = ""

除非是为了跨窗口使用,如果跨窗口使用,就不能使用ty(e.Form.Name),因为e.Form.Name指的是当前窗口名称,而不是其他窗口名称,应该是ty("日常费用支付管理")这种。审核窗口的错误看看是不是这个问题