Foxtable(狐表)用户栏目专家坐堂 → [求助]下拉窗口打开前会执行哪里的代码?


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

主题:[求助]下拉窗口打开前会执行哪里的代码?

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


加好友 发短信
等级:四尾狐 帖子:820 积分:5641 威望:0 精华:1 注册:2015/11/28 14:00:00
[求助]下拉窗口打开前会执行哪里的代码?  发帖心情 Post By:2017/6/27 15:33:00 [显示全部帖子]

我现在的系统下拉窗口打开很慢,自己随便做个速度并不慢,下拉窗口打开前会执行哪里的代码哪?我要从哪里开始排查比较好哪?

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


加好友 发短信
等级:四尾狐 帖子:820 积分:5641 威望:0 精华:1 注册:2015/11/28 14:00:00
  发帖心情 Post By:2017/6/27 17:59:00 [显示全部帖子]

以下是引用有点色在2017/6/27 16:28:00的发言:
 看看你窗口的AfterLoad、DropDownOpening、DropDownOpened事件。

相同窗口,相同事件,在我随便做的样例里并不慢。我现在的系统里,有在CurrentTableChanged事件中写如下的代码

Vars("SysUpdatePrintInfo") = True

'***************自定义代码**************
Dim tname() As String = {"仓库名称下拉_Table1","在单量详情_Table1","金属同族库存详情_Table1","带条件的料号选择_Table1","带条件的料号选择_Table2","料号选择单选_Table1"}
Dim tnames As new List(of String)
tnames.AddRange(tname)
tname = New String() {"料号选择_Table1","料号选择_Table2"}
tnames.AddRange(tname)
If tnames.Contains(CurrentTable.Name) = False Then
    Dim cns As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ProjectPath & "wjexcel.mdb;Persist Security Info=False"
    If Connections("wjexcel").ConnectionString = cns Then
        For Each grp As RibbonMenu.Group In RibbonTabs("PorjectMenu").Groups
            grp.Visible = False
        Next
    Else
        For Each grp As RibbonMenu.Group In RibbonTabs("PorjectMenu").Groups
            grp.Visible = False
        Next
        If CurrentTable.Name = "MainTable" Then
            RibbonTabs("SM").Selected = True
        Else
            RibbonTabs("PorjectMenu").Selected = True
        End If
        Dim dr As DataRow = DataTables("FTcaidanQX").SQLFind("表名 = '" & MainTable.Name & "'")
        If dr IsNot Nothing Then
            Dim cdsz() As String
            If CurrentTable.AllowEdit = True Then
                cdsz = dr("新增可见").split("|")
            Else
                cdsz = dr("查看可见").split("|")
            End If
            Dim cds As new List(of String)
            cds.AddRange(cdsz)
            For Each grp As RibbonMenu.Group In RibbonTabs("PorjectMenu").Groups
                If cds.Contains(grp.Name) Then
                    grp.Visible = True
                    For Each itm As RibbonMenu.RibbonItem In RibbonTabs("PorjectMenu").Groups(grp.Name).Items
                        If cds.Contains(itm.Name) Then
                            itm.Visible = True
                        Else
                            itm.Visible = False
                        End If
                    Next
                End If
            Next
        End If
    End If
    Dim qhcd As RibbonMenu.ToggleButton = RibbonTabs("PorjectMenu").Groups("排序与筛选").Items("切换")
    If CurrentTable.Filter > "" Then
        qhcd.Pressed = True
    Else
        qhcd.Pressed = False
    End If
End If


 


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


加好友 发短信
等级:四尾狐 帖子:820 积分:5641 威望:0 精华:1 注册:2015/11/28 14:00:00
  发帖心情 Post By:2017/6/27 18:00:00 [显示全部帖子]

现在慢的窗口就是“仓库名称下拉”,本来想把我这个菜单加到例子上看会不会慢的,结果导入模板,直接报错了。版主让我找客服恢复,本就是做例子的程序,我倒没有急着去恢复。

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


加好友 发短信
等级:四尾狐 帖子:820 积分:5641 威望:0 精华:1 注册:2015/11/28 14:00:00
  发帖心情 Post By:2017/6/27 19:33:00 [显示全部帖子]

以下是引用有点色在2017/6/27 18:46:00的发言:

1、去掉代码后速度是否变快?

 

2、把相关表的事件代码都删除后测试。

去掉CurrentTableChanged事件中的代码后,速度就快了,这个代码如何优化,或是在有下拉时不让生效哪?


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


加好友 发短信
等级:四尾狐 帖子:820 积分:5641 威望:0 精华:1 注册:2015/11/28 14:00:00
  发帖心情 Post By:2017/6/28 7:35:00 [显示全部帖子]

以下是引用有点蓝在2017/6/27 20:23:00的发言:
CurrentTableChanged是经常会触发的,这种情况就没有必要使用动态连接数据库了,直接设置数据源,然后把这个表的数据加载进来操作。

动态连接数据库,sqltable,sqlfind,sqlcommand等等这些用法不要滥用,该加载使用的还是要加载。过犹不及!

SQLFind改成了FInd,但下拉打开时仍有很明显的延迟。是不是在打开下拉窗口时,他先去其它地方执行了一圈?打开下拉时,如何关掉这个事件?


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


加好友 发短信
等级:四尾狐 帖子:820 积分:5641 威望:0 精华:1 注册:2015/11/28 14:00:00
  发帖心情 Post By:2017/6/28 8:53:00 [显示全部帖子]

这样写不行。我这里最早是这样写的,没有用,后来我改成了现在这样还是不行,"仓库名称下拉_Table1"是我现在的下拉窗口里的表名。

Dim tname() As String = {"仓库名称下拉_Table1","在单量详情_Table1","金属同族库存详情_Table1","带条件的料号选择_Table1","带条件的料号选择_Table2","料号选择单选_Table1"}
Dim tnames As new List(of String)
tnames.AddRange(tname)
tname = New String() {"料号选择_Table1","料号选择_Table2"}
tnames.AddRange(tname)
If tnames.Contains(CurrentTable.Name) = False Then
...

end if

具体的可以看我3楼的代码。

[此贴子已经被作者于2017/6/28 8:56:02编辑过]

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


加好友 发短信
等级:四尾狐 帖子:820 积分:5641 威望:0 精华:1 注册:2015/11/28 14:00:00
  发帖心情 Post By:2017/6/28 9:42:00 [显示全部帖子]

以下是引用有点色在2017/6/28 9:19:00的发言:

 currentTableChanged事件写代码

 

output.show(currentTable.name)

 

 打开你的命令窗口,再点击下拉,看弹出的表名分别是什么。 

连续出现两次当前表,然后是下拉窗口中的表,下拉窗口关掉时,又出来了当前表。这是当前表中的哪些表事件引起的吗?还是有啥特殊的原因哪?

 

我把当前表中的事件全删除,也还是会先出现两次当前表,说明不是这个表事件的问题。

[此贴子已经被作者于2017/6/28 10:04:39编辑过]

 回到顶部