我有一個用vb.net編寫的VB6程序的winforms控件。該控件動態添加到VB6控件控件集合中。VB6 Controls集合接受哪些類需要哪些屬性?
Set ctrlVB6 = Controls.Add("NETNamespace.SelVB6", "SelNet")
如果.NET類(SelVB6
)擁有所有必要的屬性Add方法返回VB6控制包裝和控制是可見的。否則,Add方法不會返回任何內容,並且控件在VB6中不可用。
.net類源自System.Windows.Forms.UserControl
,幸運的是它具有所有必需的屬性。 .net類用ClassInterface
屬性修飾以保證COM可用的屬性。
<ClassInterface(ClassInterfaceType.AutoDual)>
Public Class SelVB6
一切正常,但不是System.Windows.Forms.UserControl
所有屬性是COM可見的和大量的警告在VS2010中產生。爲了擺脫警告我需要知道哪些屬性是必要的,定義一個接口並使用ClassInterfaceType.None
。
注
我不允許使用Interop Forms Toolkit。
我知道我可以列出控制屬性Control Properties in Visual Basic 6。
警告例如:
Type library exporter warning processing 'NETNamespace.SelVB6.PreProcessControlMessage(#0)'. Warning: Non COM visible value type 'System.Windows.Forms.PreProcessControlState' is being referenced either from the type currently being exported or from one of its base types. Microsoft.Common.targets
它不僅僅是使其成爲控件的屬性,它來自Control類之一。修復你的屬性沒有顯示出來,警告取決於實際的警告是什麼。 – Deanna 2012-03-28 15:51:47
我認爲比vb6 over com不會評估.net繼承。我添加了警告示例。 – IvanH 2012-04-03 08:44:13
這些警告是正常的,大多數.NET對象不暴露給COM,只有那些需要真正實現正確的接口。 – Deanna 2012-04-03 10:02:36