Foxtable(狐表)用户栏目专家坐堂 → 窗口被关闭


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

主题:窗口被关闭

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


加好友 发短信
等级:幼狐 帖子:92 积分:1027 威望:0 精华:0 注册:2018/5/31 19:09:00
窗口被关闭  发帖心情 Post By:2019/4/8 13:05:00 [只看该作者]

各位好,

今天发现一个无法解决的问题:

英文系统windows7,foxtable高级开发版。

之前设计了afteropenproject事件中自动打开一个模式窗口,原来一直运行良好。

今天把用户登录系统从系统默认的改成了自定义的,调试通过。期间也修改了Sql server后台数据库的一些表名,使其和foxtable的表名保持一致。

一起就绪后就突然发现登录后被自动打开的窗口,会在3秒左右自动闪退。我试过的解决办法:


1. 该窗口的beforeclose事件直接写入e.cancel=true;结果无效,还是无任何提示就退出。

2. 闪退之后,在命令窗口重新打开该form,没有问题不闪退。

3. 在afteropenproject时间中试着修改maintable,无论有无设置maintable代码,无论设置哪个maintable,都无效,窗口还是打开后三秒闪退。

这个窗口必须一开始就要打开,因为涉及不同用户所需要的界面,

请问老师还有什么可能的原因导致这个问题呢?


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


加好友 发短信
等级:幼狐 帖子:92 积分:1027 威望:0 精华:0 注册:2018/5/31 19:09:00
  发帖心情 Post By:2019/4/8 13:34:00 [只看该作者]

补充测试:在该模式窗口before close事件中写入messagebox代码,窗口闪退的之后显示了设定的信息,证明该before close事件被触发,但e.cancel=true代码无效。窗口也是先于messagebox被关闭。

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


加好友 发短信
等级:幼狐 帖子:92 积分:1027 威望:0 精华:0 注册:2018/5/31 19:09:00
  发帖心情 Post By:2019/4/8 13:39:00 [只看该作者]

下面是afteropenproject的代码

'****************************************************************************************************
'首先启动用户登录验证
Forms("UserLogin").Open()
If _UserName = "" Then
    '若验证失败
    Syscmd.Project.Exit(False)
    Return '这个要加上,因为既然要退出,就不应该再执行后面的初始化代码了,否则会出错
End If

'****************************************************************************************************
'项目的初始化代码改放在这里,因为在此之前事件的代码不会受到自定义用户的影响.
'****************************************************************************************************
 
'*****************************************************************************
'针对用户类型加载不同的表和表的数据
For Each dt As DataTable In DataTables
    
    Select Case dt.name
       
            
        Case "Quotations"
            '根据用户类别判定加载内容
            Select Case _usergroup
                Case "ExtQs"
                    dt.LoadFilter="Estimator='" & _PreferredName & "'And DateDiff(m, DateReceived, GetDate()) < 4"  '加载三个月及以内的数据
                    dt.load()
                Case "manager", "salesperson", "Qs","administrator"
                    '加载全部数据
                    dt.LoadFilter="1=1"
                    dt.load()
                    '其他人不加载数据
            End Select
            
        Case "MeasureDetails","PurchaseOrderDetails","SalesOrderDetails","PurchInvDetails","SalesInvDetails","StockAdjustmentDetail","ProcureContractDetails"
            '还是不加载数据,稍后根据父行的变动而自动加载数据
            
        Case "GLedger_StockMovements", "GLedger_Transactions"
            '还是不加载数据,因为数据太大.尽量都在后台操作. 后面步骤实在有需要时(如需要查询明细时)再按条件加载数据
            
        Case "SysUserAccounts"
            '只有管理员才加载全部数据
            If _usergroup="administrator" Then
                dt.LoadFilter="1=1"
                dt.load()
            End If
            
        Case Else
            '永远加载全部内容
            dt.LoadFilter="1=1"
            dt.load()
            
    End Select
Next
'************************************************

'************************************************
'针对普通用户隐藏表标题
If User.Type = UserTypeEnum.Developer
    TableCaptionVisible =True
Else
    TableCaptionVisible = False
End If

'************************************************
'禁止普通用户非法复制表格内容
Select Case _UserGroup
    Case  "administrator"
    Case Else
        For Each dt As DataTable In DataTables
            Select Case dt.name
                Case "orderitems", "MeasureDetails","SalesInvDetails","PurchInvDetails","StockAdjustmentDetail","GLedgerEntry","SalesOrderDetails","PurchaseOrderDetails"
                    
                Case Else
                    dt.AllowClipBoard = False
            End Select
        Next
End Select

'************************************************
'针对用户类别打开不同的欢迎页面
Select Case _UserGroup
    Case "WorkShop"
        Forms("Production").show
        
    Case "ExtQS"
        Forms("Quotations").show      
        
    Case Else
          Forms("afterlogin").show
         MainTable=Tables("afterlogin")
        
End Select
'*****************************************

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


加好友 发短信
等级:幼狐 帖子:92 积分:1027 威望:0 精华:0 注册:2018/5/31 19:09:00
  发帖心情 Post By:2019/4/8 13:41:00 [只看该作者]

Forms("Quotations").show  就是发生闪退的窗口,无论怎么改代码都不行。

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


加好友 发短信
等级:幼狐 帖子:92 积分:1027 威望:0 精华:0 注册:2018/5/31 19:09:00
  发帖心情 Post By:2019/4/8 13:45:00 [只看该作者]

刚又发现,当我重设项目属性后,afterproject事件似乎也被触发,这时该窗口正常打开不会闪退。问题只发生在我刚开始登陆系统的时候。图片点击可在新窗口打开查看

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


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

 

你是不是设置了窗口的属性->自动打开->true?如果设置了,请改成false。

 

你屏蔽你启动项目的事件,如 afterOpenProject 等事件的代码,然后测试。

 

 


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


加好友 发短信
等级:幼狐 帖子:92 积分:1027 威望:0 精华:0 注册:2018/5/31 19:09:00
  发帖心情 Post By:2019/4/9 5:39:00 [只看该作者]

窗口属性是正确的没有打开。经屏蔽测试,初步认定是之前的步骤中启动qqclient造成的,不知道为什么会这样。
qqclient启动正常,但放在这个打开窗口之前就导致窗口闪退。
窗口的关闭似乎和popmessage的关闭是同时的,难道是qqclient的popmessage被自动关闭的时候和窗口发生了联动?

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


加好友 发短信
等级:幼狐 帖子:92 积分:1027 威望:0 精华:0 注册:2018/5/31 19:09:00
  发帖心情 Post By:2019/4/9 5:44:00 [只看该作者]

为了验证这个猜测,我更改qqclient代码,只登陆但不弹出popmessage,结果一切正常,窗口不再被关闭了。

结论猜测:极有可能是popmessage的定时关闭和后面登陆后自动打开的工作窗口发生了联动,希望Foxtable可以针对此点进行改进。

谢谢

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


加好友 发短信
等级:幼狐 帖子:92 积分:1027 威望:0 精华:0 注册:2018/5/31 19:09:00
  发帖心情 Post By:2019/4/9 5:51:00 [只看该作者]

再次测试,修改popmessage的duration选项,设为不自动关闭。项目打开后,发现该模式窗口始终处于最前端,popmessage窗口无法且换到前端而进行手工关闭。这个验证了上面的猜测,自动关闭popmessage的时候,程序错误地将处于最前端的模式窗口一并给关了。

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


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

是有这种bug。你试试用【计划管理】打开popmessage窗口,也就是把计划打开,执行完以后,关闭计划

 

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

 

或者是弃用popmessage,自己做一个提示窗口。


 回到顶部