Interfaces

17/05/2010 - 08:18 von Lothar Geyer | Report spam
Ich hab' offenbar mal wieder einen Knoten im Hirn und bitte um Hilfe.

Auf einer Form habe ich mehrere UserControls. Jedes UserControl
implementiert ein Interface:

Implements ifDetailCtl

In der Form steht:

Private Type TabDatenType
...
TabControl As ifDetailCtl
End Type
Private myTabDaten() as TabDatenType

Private Sub Form_Load()
...
ReDim myTabDaten(3)
myTabDaten(1)
Set myTabDaten(1).TabControl = DetailAllgemein
myTabDaten(2)
Set myTabDaten(2).TabControl = DetailTexte
myTabDaten(3)
Set myTabDaten(3).TabControl = DetailSelekt

Aber bei der ersten Set-Anweisung (und natürlich auch bei den folgenden,
wenn ich die erste überspringe) gibt es einen Fehler "Typen unvertràglich".

Wo liegt der Fehler?

Lothar Geyer
 

Lesen sie die antworten

#1 Ulrich Korndoerfer
17/05/2010 - 09:40 | Warnen spam
Hallo Lothar,

Lothar Geyer schrieb:

Ich hab' offenbar mal wieder einen Knoten im Hirn und bitte um Hilfe.

Auf einer Form habe ich mehrere UserControls. Jedes UserControl
implementiert ein Interface:

Implements ifDetailCtl

In der Form steht:

Private Type TabDatenType
...
TabControl As ifDetailCtl
End Type
Private myTabDaten() as TabDatenType

Private Sub Form_Load()
...
ReDim myTabDaten(3)
myTabDaten(1)
Set myTabDaten(1).TabControl = DetailAllgemein
myTabDaten(2)
Set myTabDaten(2).TabControl = DetailTexte
myTabDaten(3)
Set myTabDaten(3).TabControl = DetailSelekt

Aber bei der ersten Set-Anweisung (und natürlich auch bei den folgenden,
wenn ich die erste überspringe) gibt es einen Fehler "Typen unvertràglich".

Wo liegt der Fehler?

Lothar Geyer



UserControls sind, aus COM-Sicht, komplexe Biester. Das, was Du
normalerweise von einem Usercontrol zu sehen bekommst, ist seine
offizielle, öffentliche Schnittstelle. Implementiert ein Usercontrol ein
Interface, wird dieses von (einer) der dahinterliegenden Klasse(n)
implementiert und ist nicht über die öffentliche Schnittstelle direkt
erreichbar. Glücklicherweise bietet die öffentliche Schnittstelle aber
eine Property, mit Hilfe derer Du auf die in diesem Fall relevante
Schnittstelle zugreifen kannst.

Lange Rede, kurzer Rat:

ersetze

Set myTabDaten(1).TabControl = DetailAllgemein

durch

Set myTabDaten(1).TabControl = DetailAllgemein.Object

Das funktioniert natürlich nur, wenn DetailAllgemein ein Verweis auf ein
Usercontrol ist, welches ifDetailCtl implementiert.

Oh, und wundere dich nicht, wenn dir Intellisense die Property Object
nicht anbietet (sie gibts trotzdem) :-)

Ulrich Korndoerfer

VB tips, helpers, solutions -> http://www.proSource.de/Downloads/

Ähnliche fragen