2009-03-11 5 views
1

VB6 응용 프로그램에서 사용하는 dotNet 컨트롤의 기본 속성을 설정해야합니다.dotNet Interop Usercontrol의 기본 속성

<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 속성은 트릭을 수행하지 않습니다.

나는 here으로 수동으로 DispId를 0으로 설정하면 트릭을 수행해야한다고 읽었습니다. 하지만 이렇게하면 :

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

DispId Zero가 DefaultProperty 용으로 예약되었음을 Visual Basic에서 친절하게 알려줍니다. 네. 나는 그것을 안다. 나는 것을 원하는. 그러나 어떻게?

편집 :

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

이 속성으로 작업을 지금 VB6의 기본 속성으로 나타 않습니다.

aStringVariable = myUserControlInstance 

This MSDN article이에 대한 몇 가지 정보를 가지고 : 나는 같은 것을 할 것이다, 변경할 수있는 코드가 있기 때문에 그러나 이것은 내 문제가 해결되지 않습니다.

답변

2

코드가 있기 때문에 어떤 I 수없는 변화

만일 경우 당신은 래퍼 클래스를 만들 필요가 원래 .NET 클래스와 수출이 VB6에서 사용하는 컨트롤로 . 그런 다음 default 키워드를 사용하여 default 속성을 표시 할 수 있습니다.

+0

래퍼가 VB6 사용자 컨트롤이 되었습니까? 또는 dotNet 측에서 마술을 할 수 있습니까? – dummy

+0

선택 사항. 래퍼는 기본 속성이 원하는 방식으로 작동한다는 점을 제외하고는 원래 컨트롤을 거의 복제합니다. 매개 변수없이 기본 속성을 사용하려면 vb6 사용자 정의 컨트롤을 사용해야합니다. –

+0

통찰력을 가져 주셔서 감사합니다. 아무도 대답하지 않으면 나는이 답을 며칠 안에 받아 들일 것이다. – dummy

1

VB6의 기본 속성 동작을 모방하기 위해 VB6에서 래퍼를 만드는 방법 외에 다른 방법은 없습니다. 몇 가지 interop 사용자 정의 컨트롤을 만들어야했습니다. 이것이 VB6에서 .Net interop 컨트롤을 다시 포장해야하는 주된 이유였습니다 (많은 코드 변경과 막대한 테스트 노력을 피하기 위해).