2009-03-11 33 views
1

VB6 Uygulaması tarafından kullanılan dotNet Kontrolünün varsayılan özelliğini ayarlamanız gerekiyor.dotNet Interop için varsayılan özellik 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 Özellik hile yapmaz.

Sıfırdan DispId öğesini elle ayarlayan here numarasını okudum. Bunu Ama eğer:

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

Visual Basic nazik dispID Sıfır DefaultPropertyToolboxData için ayrılmıştır bana bildirir. Evet. Bunu biliyorum. Bunu istiyorum. Ama nasıl?

Düzenleme:

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

özelliği olarak iş şimdi VB6 varsayılan özellik olarak gösterir yapar.

aStringVariable = myUserControlInstance 

This MSDN article bu konuda bazı bilgiler: Böyle bir şey yapacak ki, değiştiremez kod olmadığından Ama bu, benim sorunu çözmez.

cevap

2

kod olduğundan hangi yapamam değişiklik

Eğer durum o zaman etrafında sarıcı sınıf oluşturmak gerektiğini orijinal .NET Sınıf ve ihracat o VB6 tarafından kullanılan kontrol olarak . Ardından varsayılan özelliği varsayılan anahtar kelimeyi kullanarak işaretleyebilirsiniz.

+0

Sarma makinesinin VB6 kullanıcı denetimi var mı? Ya da dotNet tarafında biraz büyü yapabilir miyim? – dummy

+0

Seçiminiz. Sarmalayıcı, varsayılan özelliği istediğiniz gibi çalışmasını sağlamak dışında orijinal denetimi hemen hemen yineleyecektir. Eğer herhangi bir parametresi olmayan bir varsayılan özelliği kullanmak istiyorsanız, o zaman kesinlikle kullanıcı gereksiniminizi kullanmanız gerekir. –

+0

Görüşünüz için teşekkür ederiz. Kimsenin cevap vermemesi halinde bu cevabı birkaç gün içinde kabul edeceğim. – dummy

1

VB6'nın varsayılan özellik davranışını taklit etmek için VB6'da bir sarıcı oluşturmanın başka yolu yoktur. Ben birkaç interop kullanıcı kontrolleri oluşturmak zorunda kaldım ve bu VB6 tekrar bir ağ etkileşimi kontrol etmek zorunda kalmanın ana nedeni oldu (kod değişikliği ve büyük test çabalarının bir sürü önlemek için).