我的问题是我的 Access 2002 应用程序中的树视图。
当我打开表单时,它已经被填充了。这很奇怪,因为添加节点的唯一代码绑定到按钮。
此外,仅显示部分数据,当我在选项卡 () 之间切换时,树视图中的数据重复/双倍。然后当我点击任何其他选项卡时,Access 会立即崩溃,就像 * zap *
是否有必要一直清理树视图?
任何其他想法可能是什么问题 - 也欢迎解决方案;)
干杯,拉蒙
我遇到了这个问题并将其追溯到树视图控件不喜欢在标签页上。您将不得不重新设计表单以将树视图保留在选项卡之外。
如果它必须出现在标签页上,那么您可以尝试.......
将树视图放在选项卡控件后面。将选项卡控件的背景设置为透明。在选项卡控件的“更改时”事件中,获取它以检查正在选择哪个选项卡。如果它是您想要的选项卡,则将树视图设置为可见,否则将其隐藏
我使用 VCL (Delphi/BCB) 包装器作为选项卡上的树视图控件(TPageControl 上的 TTreeView)。
一旦我调用 TreeView1.Items.Clear ,我的程序就会挂起。但仅在“某些”情况下!特别是如果我展开一个项目然后尝试 Clear() 所有项目。如果我从不触摸任何节点(或仅滚动),那很好。
我发现在调用 Items.Clear 之前将所选节点设置为 NULL 为我解决了这个问题。
有趣的是,调用 Clear() 导致一些 OnChange 事件由于某种原因发生,这是意料之外的(因为我们无论如何都要删除所有节点!)...
首先,找出为什么 TreeView 在您还没有告诉它时正在加载。单步执行您的代码。你必须先解决这个问题。
其次,如果您不加载 TreeView 但切换选项卡,表单是否会崩溃?
谢谢你的建议。
我仍然没有发现为什么将数据加载到 TreeView 中,但我想出了一个解决方案。
首先,我在加载表单时开始清理 TreeView。
这确实对稳定性有好处。现在可以在不崩溃 Access 的情况下四处点击。
当数据加载到 TreeView 时,旧行为再次出现。在选项卡之间切换会添加更多数据并最终导致 Access 崩溃。
似乎 TreeView(6.0 版)正在重建自身而没有正确清理。
基于这个假设,我现在在切换到包含选项卡时清除并重建 TreeView。
我仍然对根本原因感兴趣,但它现在起作用了。
再次感谢,拉蒙
我不敢相信这个问题仍然存在并且微软没有发布任何修复程序!我在运行 Office 2010 的 Windows 8.1 中遇到了同样的问题
无论如何,我达到的最简单的解决方法(并且可能会节省资源)是在表单的“当前事件”中构建当前活动选项卡的 TreeView。
Private Sub Form_Current()
Select Case Me.tabCompany.Value 'Return Page Index of active page
Case 0 ' Page Index for Page 1.
Call TVPage1
Case 1 ' Page Index for Page 2.
Call TVPage2
End Select
End Sub
要记住的另一件事是在选项卡的“更改事件”中从一个页面切换到另一个页面时运行相同的例程来更新 TreeView:
Private Sub tabCompany_Change()
Select Case Me.tabCompany.Value 'Return Page Index of active page
Case 0 ' Page Index for Page 1.
Call TVPage1
Case 1 ' Page Index for Page 2.
Call TVPage2
End Select
End Sub
干杯!
在使用不同选项卡上的 TreeView 控件在选项卡之间切换时,MsAccess 2016/Win10 仍然崩溃。我最初的错误方法是在离开选项卡后清除节点- 就像我对位于不同选项卡上的子表单一样(节省资源)。
Private Sub MainTabCtrl_Change()
'Activate selected/called Tab
Select Case Nz(Me![MainTabCtrl],0)
Case 0 'Tab 1
Me![SubFormTab1].Form.RecordSource = "tblSubFormData"
Me.TreeViewTab1.Object.Nodes.Clear
Call BuildTreeView1
Case 1 'Tab 2
Me.TreeViewTab2.Object.Nodes.Clear
Call BuildTreeView2
End Select
'Deactivate leaving Tab
Select Case Nz(Me![PriorTab],0)
Case 0 'Tab 1
Me![SubFormTab1].Form.RecordSource = ""
'Do nothing with TreeView1
Case 1 'Tab 2
'Do nothing with TreeView2
End Select
Me![PriorTab] = Me![MainTabCtrl]
End Sub
在调用 Tab 时清除 TreeView 节点(如果需要),而不是在离开 Tab 时清除 TreeView 中的节点。