Foxtable(狐表)用户栏目专家坐堂 → 很奇怪的一个现象


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

主题:很奇怪的一个现象

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


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
很奇怪的一个现象  发帖心情 Post By:2017/7/13 21:31:00 [只看该作者]

一段代码,就是 遍历所有的 Table ,判断 它的主窗口是否打开,如果没有打开,则打开     

(第一段代码)
For Each aTable As Table In Tables
        If aTable.DataTable.Type = 3 OrElse aTable.DataTable.Type = 4 Then  '仅仅针对外部表, 根据权限显示
            'aTable.visible = True
            Functions.Execute("打开主窗口",aTable.name & "主窗口")      //  打开主窗口的代码如下
        End If
    Next


打开主窗口的代码如下:(第二段代码)


Dim FormName As String = args(0)

Try
    If Forms.contains(FormName) Then
        If Forms(FormName).Opened = False Then
            Forms(FormName).Open              //注意这里, 如果主句 注释掉,不执行, 则不会保存, 执行,则报以下错误
        End If
        
    End If
Catch ex As Exception
    MessageBox.Show( FormName & "出错        "  & ex.ToString)
End Try


报错误如下:


图片点击可在新窗口打开查看此主题相关图片如下:1234.png
图片点击可在新窗口打开查看

从报错的内容看,并不是 在第二段代码报的错误,而是在第一段代码里报的

好像是 执行    Forms(FormName).Open  时, 引发了  Tables 集合的改变,而导致第一段执行错误,不能继续遍历下去了

那么 Forms(FormName).Open   只是打开窗口,怎么会引起 Tables 集合的改变呢? 该怎么样避免呢?



[此贴子已经被作者于2017/7/13 21:31:32编辑过]

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


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

你的Tables集合改变了。因为你窗口有窗口表,打开后就新增了表。

 

你可以改成这样

 

Dim ts as new List(Of table)
For Each t As Table In Tables
    ts.add(t)
Next
For Each t As Table In ts
    forms("窗口1").show
Next


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


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By:2017/7/13 22:15:00 [只看该作者]

可是我想弄清楚, 之前的代码,是什么地方出了错误呢?

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


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

这句

 

For Each aTable As Table In Tables

 

换成2楼的方法。


 回到顶部