質問

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記事にはいくつかの情報がありますこれについて。

役に立ちましたか?

解決

  

私ができないコードがあるから   変更

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

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top