以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  当前表切换事件的问题,BUG?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=84873)

--  作者:凡夫俗子
--  发布时间:2016/5/12 11:58:00
--  当前表切换事件的问题,BUG?
问题现象:
项目中有当前表切换事件 ,在当前表切换是将 当前表的 名称记录为一个 常量 当前表名称。
屏幕上显示的是 表A (这时系统的“当前表名称”是,“表A”。 )
再打开 一个窗口F 窗口中的表是 "窗口F_table1",该表是 SQL生成的表 ,在表中进行了操作,(这时系统的“当前表名称”是,“窗口F_table1”。 )
通过命令窗口 msgbox(CurrentTable.name)  显示为 窗口F_table1
然后再关闭了窗口F,因"窗口F_table1"是SQL生成的表,所以窗口F关闭了,该表的生命周期也就结束了。即表已不存在了。

关闭了窗口F,则界面呈现了“表A”,此时,对于人而言,当前表是“表A”了
(这时系统的“当前表名称”是,"窗口F_table1"。 )
但对于计算机或FOXTABLE而言,当前表也是“表A”,通过命令窗口 msgbox(CurrentTable.name) 显示正确 为表A

那么问题来了,说明FOXTABLE系统中  的当前表是切换了,

但是 项目中的 当前表切换事件中的代码没有执行?

经测试的确如此:在项目的当前表变化事件 中 一开始写上 msgox(1)

点表标题切换表时,这个1显示了两次,说明当前表变化事件执行了两次, 为什么要执行两次,有些想不通。
然后打开上面的寻个窗口:在窗口开启前 1居然显示了 23次,窗口显示后,1显示了1 次,为什么之前执行23次这个事件,有些想不通。
然后关闭这个窗口,1 一次也不显示,但系统当前表有切换 ,但1不显示 也想不通。


[此贴子已经被作者于2016/5/12 12:05:09编辑过]

--  作者:大红袍
--  发布时间:2016/5/12 12:15:00
--  

这个事件是有点问题的,建议你在SystemIde事件检测当前表的变化触发代码

 

static ct As Table = CurrentTable
If ct.name <> CurrentTable.name Then
    ct = CurrentTable
    msgbox(ct.name)
End If


--  作者:凡夫俗子
--  发布时间:2016/5/12 12:39:00
--  
有BUG这个事件 等于废了
--  作者:大红袍
--  发布时间:2016/5/12 12:40:00
--  
 看2楼方法。
--  作者:凡夫俗子
--  发布时间:2016/5/12 12:53:00
--  
然后打开上面的寻个窗口:在窗口开启前 1居然显示了 23次,窗口显示后,1显示了1 次,为什么之前执行23次这个事件,有些想不通。 这个 反复被执行可能是什么原因造成的
--  作者:大红袍
--  发布时间:2016/5/12 14:21:00
--  
看2楼啊。
--  作者:凡夫俗子
--  发布时间:2016/5/12 15:25:00
--  
这个事件是有点问题的
意思是 意料之外的反复执行也就是 有点问题之内的?

--  作者:大红袍
--  发布时间:2016/5/12 15:51:00
--  
以下是引用凡夫俗子在2016/5/12 15:25:00的发言:
这个事件是有点问题的
意思是 意料之外的反复执行也就是 有点问题之内的?

 

那你可以不用这个事件,而改成2楼的代码。


--  作者:狐狸爸爸
--  发布时间:2016/5/12 16:06:00
--  

关闭窗口不触发CurrentTableChanged事件的问题,明天修正。

至于事件执行两次,是正常的,如果想避免重复执行,可以:

 

Static ln as string

If CurrentTable Isnot Nothing then

   if   CurrentTable.Name = ln  Then

          Return

   Else

       ln = CurrentTable.Name

    Endif

end if

....你原来的代码


--  作者:凡夫俗子
--  发布时间:2016/5/12 16:13:00
--  
执行两次 是可以接受的,但执行23次就不知 是啥原因引起的