1

VB6 アプリケーションで使用される dotNet コントロールの既定のプロパティを設定する必要があります。

<ComClass(myControl.ClassId, myControl.InterfaceId, myControl.EventsId)> _
<DefaultProperty("NewProperty")> _
Public Class myControl

    Public Const ClassId As String = "86252de2-ca87-4468-adbe-ad7c47747759"
    Public Const InterfaceId As String = "c1cbf1a1-24bb-46c3-88a4-813eb4917845"
    Public Const EventsId As String = "954ed890-011c-4908-ab33-610159fe6eb1"

    Private newPropertyValue As String
    Public Property NewProperty() As String
        Get
            Return newPropertyValue
        End Get
        Set(ByVal value As String)
            newPropertyValue = value
        End Set
    End Property
End Class

DefualtProperty 属性はそのトリックを行いません。

ここで、 DispId を手動でゼロに設定するとうまくいくはずだと読みました。しかし、私がこれを行うと:

<DispId(0)> Public Property NewProperty() As String

Visual Basic から、DispId Zero が DefaultProperty 用に予約されていることがわかりました。うん。そんなこと知ってる。それが欲しいです。しかし、どのように?

編集:

Default Public Property NewProperty(ByVal foo As Integer) As String

プロパティがVB6のデフォルトプロパティとして表示されるようになったため、機能します。しかし、これは私の問題を解決しません。変更できないコードがあり、次のようなことを行うからです。

aStringVariable = myUserControlInstance

この MSDN の記事には、これに関する情報が含まれています。

4

2 に答える 2

2

変更できないコードがあるため

その場合は、元の .NET クラスの周りにラッパー クラスを作成し、それを VB6 で使用されるコントロールとしてエクスポートする必要があります。次に、default キーワードを使用してデフォルト プロパティをマークできます。

于 2009-03-11T15:37:14.357 に答える
1

VB6 の既定のプロパティ動作を模倣するために、VB6 でラッパーを作成する以外に方法はありません。いくつかの相互運用ユーザー コントロールを作成する必要がありました。これが、.Net 相互運用コントロールを VB6 で再度ラップする必要があった主な理由です (多くのコード変更と膨大なテスト作業を避けるため)。

于 2009-06-29T19:57:58.470 に答える