"invalid property assignment" 将集合与 WebBrowser 控件和 ObjectForScripting 一起使用时
"invalid property assignment" when using a collection with the WebBrowser control and ObjectForScripting
我正在为我正在处理的系统模拟第三方 VB.net 应用程序 - 真正的后端(我无权访问)使用 WebBrowser 控件和一些接口 javascript(我确实有权访问)。
其中大部分工作正常,但我在添加 javascript 中引用的集合时遇到了一些问题。 javascript 文件中存在各种类似这样的引用:
var insSetCount = booking.InsertionSets.Count;
for (var nInsSet = 1; nInsSet <= insSetCount; nInsSet++) {
var insSet = booking.InsertionSets(nInsSet);
}
此对象看起来是某种集合...我了解到 COM 不支持通用列表,因此我尝试添加 Public InsertionSets As ArrayList
。但是,我在上面的第三行javascript:
得到了如下错误
TypeError: Wrong number of arguments or invalid property assignment
然后我尝试使用显式默认 属性 分配滚动我自己的集合:
<ComVisible(True)>
Public Class InsertionSetCollection
Inherits CollectionBase
Public Sub New()
MyBase.New()
End Sub
Public Sub Add(ByVal obj As InsertionSet)
List.Add(obj)
End Sub
Default Public ReadOnly Property Item(ByVal index As Integer) As InsertionSet
Get
Return CType(List.Item(index - 1), InsertionSet)
End Get
End Property
End Class
但这种方法与我使用 ArrayList 时的结果相同。
我暂时解决了这个问题,方法是在 javascript 中将对 InsertionSets(i)
的所有引用替换为 InsertionSets.Item(i)
- 这似乎有效,但当然涉及修改生产代码。
任何人都可以告诉我应该在此处使用哪种集合类型,或者如何有效地将默认值 属性 与 COM Interop 一起使用?
我已经在此处提取了我的 VB.net 代码:http://pastebin.com/wx7ZR1ME,如果缺少重要内容,请告诉我。
以下内容适用于 C#,请注意 [DispId(0)]
。希望您可以将其转换为 VB.NET:
[ComVisible(True)]
public class ScritingArray {
ArrayList _items = new ArrayList();
[DispId(0)]
public object this[int index]
{
get { return _items[index]; }
set { _items[index] = value; }
}
}
我正在为我正在处理的系统模拟第三方 VB.net 应用程序 - 真正的后端(我无权访问)使用 WebBrowser 控件和一些接口 javascript(我确实有权访问)。
其中大部分工作正常,但我在添加 javascript 中引用的集合时遇到了一些问题。 javascript 文件中存在各种类似这样的引用:
var insSetCount = booking.InsertionSets.Count;
for (var nInsSet = 1; nInsSet <= insSetCount; nInsSet++) {
var insSet = booking.InsertionSets(nInsSet);
}
此对象看起来是某种集合...我了解到 COM 不支持通用列表,因此我尝试添加 Public InsertionSets As ArrayList
。但是,我在上面的第三行javascript:
TypeError: Wrong number of arguments or invalid property assignment
然后我尝试使用显式默认 属性 分配滚动我自己的集合:
<ComVisible(True)>
Public Class InsertionSetCollection
Inherits CollectionBase
Public Sub New()
MyBase.New()
End Sub
Public Sub Add(ByVal obj As InsertionSet)
List.Add(obj)
End Sub
Default Public ReadOnly Property Item(ByVal index As Integer) As InsertionSet
Get
Return CType(List.Item(index - 1), InsertionSet)
End Get
End Property
End Class
但这种方法与我使用 ArrayList 时的结果相同。
我暂时解决了这个问题,方法是在 javascript 中将对 InsertionSets(i)
的所有引用替换为 InsertionSets.Item(i)
- 这似乎有效,但当然涉及修改生产代码。
任何人都可以告诉我应该在此处使用哪种集合类型,或者如何有效地将默认值 属性 与 COM Interop 一起使用?
我已经在此处提取了我的 VB.net 代码:http://pastebin.com/wx7ZR1ME,如果缺少重要内容,请告诉我。
以下内容适用于 C#,请注意 [DispId(0)]
。希望您可以将其转换为 VB.NET:
[ComVisible(True)]
public class ScritingArray {
ArrayList _items = new ArrayList();
[DispId(0)]
public object this[int index]
{
get { return _items[index]; }
set { _items[index] = value; }
}
}