2012-03-28 104 views
1

我有一個用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

+1

它不僅僅是使其成爲控件的屬性,它來自Control類之一。修復你的屬性沒有顯示出來,警告取決於實際的警告是什麼。 – Deanna 2012-03-28 15:51:47

+0

我認爲比vb6 over com不會評估.net繼承。我添加了警告示例。 – IvanH 2012-04-03 08:44:13

+0

這些警告是正常的,大多數.NET對象不暴露給COM,只有那些需要真正實現正確的接口。 – Deanna 2012-04-03 10:02:36

回答

0

警告只需複製出來,使它們像記事本+ +。然後,您可以快速完成一個宏並將其過濾掉,以便隔離所有需要聲明的函數。然後只要申報他們真的很快。

+0

問題是我正在使用'ClassInterfaceType.AutoDual',並且該類是從'System.Windows.Forms.UserControl'派生的。夢想是關於我不希望**被宣佈的功能。我正在尋找那些必要的。 – IvanH 2013-10-16 13:15:38