以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 窗口被关闭 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=133148) |
-- 作者:Grandraw -- 发布时间: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 -- 发布时间:2019/4/8 13:34:00 -- 补充测试:在该模式窗口before close事件中写入messagebox代码,窗口闪退的之后显示了设定的信息,证明该before close事件被触发,但e.cancel=true代码无效。窗口也是先于messagebox被关闭。 |
-- 作者:Grandraw -- 发布时间: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 -- 发布时间:2019/4/8 13:41:00 -- Forms("Quotations").show 就是发生闪退的窗口,无论怎么改代码都不行。 |
-- 作者:Grandraw -- 发布时间:2019/4/8 13:45:00 -- 刚又发现,当我重设项目属性后,afterproject事件似乎也被触发,这时该窗口正常打开不会闪退。问题只发生在我刚开始登陆系统的时候。 |
-- 作者:有点甜 -- 发布时间:2019/4/8 14:23:00 --
你是不是设置了窗口的属性->自动打开->true?如果设置了,请改成false。
你屏蔽你启动项目的事件,如 afterOpenProject 等事件的代码,然后测试。
|
-- 作者:Grandraw -- 发布时间:2019/4/9 5:39:00 -- 窗口属性是正确的没有打开。经屏蔽测试,初步认定是之前的步骤中启动qqclient造成的,不知道为什么会这样。 qqclient启动正常,但放在这个打开窗口之前就导致窗口闪退。
窗口的关闭似乎和popmessage的关闭是同时的,难道是qqclient的popmessage被自动关闭的时候和窗口发生了联动? |
-- 作者:Grandraw -- 发布时间:2019/4/9 5:44:00 -- 为了验证这个猜测,我更改qqclient代码,只登陆但不弹出popmessage,结果一切正常,窗口不再被关闭了。 结论猜测:极有可能是popmessage的定时关闭和后面登陆后自动打开的工作窗口发生了联动,希望Foxtable可以针对此点进行改进。 谢谢
|
-- 作者:Grandraw -- 发布时间:2019/4/9 5:51:00 -- 再次测试,修改popmessage的duration选项,设为不自动关闭。项目打开后,发现该模式窗口始终处于最前端,popmessage窗口无法且换到前端而进行手工关闭。这个验证了上面的猜测,自动关闭popmessage的时候,程序错误地将处于最前端的模式窗口一并给关了。 |
-- 作者:有点甜 -- 发布时间:2019/4/9 10:20:00 -- 是有这种bug。你试试用【计划管理】打开popmessage窗口,也就是把计划打开,执行完以后,关闭计划
http://www.foxtable.com/webhelp/scr/0657.htm
或者是弃用popmessage,自己做一个提示窗口。 |