. net互操作传递VB6表单
本文关键字:VB6 表单 互操作 net | 更新日期: 2023-09-27 18:10:52
我正试图开发一个。net类,更新一个VB6表单及其控件与各种新的标题(它是在一个程序集,是COM可见)。
我传递一个VB6表单ByRef作为一个对象到。net类,然后更新标题等的形式如下:
Public Sub AddFormRefLegacy(ByRef objForm As Object)
Try
objForm.Caption = "some new caption"
For Each ctl As Object In objForm.Controls
Select Case TypeName(ctl)
Case "Label"
ctl.caption = "some new caption"
Case "Frame"
ctl.caption = "some new caption"
Case "CommandButton", "PushButton"
ctl.caption = "some new caption"
'etc etc
这在85%的情况下工作,但偶尔我得到一个运行时错误80131500没有这样的接口(E_NOINTERFACE)
我不确定这到底在哪里抛出错误,但有人能看到任何明显的错误吗?
编辑
问题似乎发生在这个部分:
Case "ITabStrip" 'MS Common Controls 6
For i = 0 To ctl.Tabs.Count - 1 ' this sometimes throws the error!
ctl.Tabs(i + 1).Caption = FindValue(objForm.Name, ctl.Name, i, ctl.Tabs(i + 1).Caption)
Next
一个可能的问题可能是VB6标签不是窗口控件,而是绘制在窗体的窗口上。另一个可能的问题是,如果你使用某些第三方控件,他们可能会使用所有者绘制技术,可能会做意想不到的事情。
我建议通过控制来缩小范围,看看他们中是否有人有问题。