以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 很奇怪的一个现象 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=103670) |
-- 作者:zhsenchzhi -- 发布时间: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 报错误如下: 从报错的内容看,并不是 在第二段代码报的错误,而是在第一段代码里报的 好像是 执行 Forms(FormName).Open 时, 引发了 Tables 集合的改变,而导致第一段执行错误,不能继续遍历下去了 那么 Forms(FormName).Open 只是打开窗口,怎么会引起 Tables 集合的改变呢? 该怎么样避免呢? [此贴子已经被作者于2017/7/13 21:31:32编辑过]
|
-- 作者:有点甜 -- 发布时间:2017/7/13 21:49:00 -- 你的Tables集合改变了。因为你窗口有窗口表,打开后就新增了表。
你可以改成这样
Dim ts as new List(Of table) |
-- 作者:zhsenchzhi -- 发布时间:2017/7/13 22:15:00 -- 可是我想弄清楚, 之前的代码,是什么地方出了错误呢? |
-- 作者:有点甜 -- 发布时间:2017/7/13 22:20:00 -- 这句
For Each aTable As Table In Tables
换成2楼的方法。 |