Forums Neueste Beiträge
 

[VB5/6] Verschiedene UserControls von einem Interface ableiten? Probleme mit dem Typ

21/06/2010 - 07:41 von Johann Maar | Report spam
Hallo,

ich habe ein paar verschiedene "benutzerdefinierte Steuerelemente" in
meinem Projekt bspw. ctlServer, ctlClient, ctlFileOutput. Alle drei
besitzen die Funktion LinkTo, mit der ich die UserControls
untereinander verknüpfen will. Die Funktion merkt sich dann intern in
einem Array, mit welchen UserControl-Instanzen sie verknüpft ist und
schickt da ggf. mal Daten hin. Das soll natürlich unabhàngig von deren
konkreten Typen funktionieren. Wenn ich ein paar Controls in meiner
Form platziere, dann möchte ich in Form_Load bspw. dies schreiben:

ctlServer1.LinkTo(ctlClient1)
ctlServer1.LinkTo(ctlFileOutput1)

Nun tritt hier natürlich schon das Problem auf, dass alle Controls
unterschiedlichen Typs sind. Ich dachte nun, man könnte allen ein
gemeinsames Interface verpassen. Aber leider komme ich nicht recht
weiter. Dies habe ich schon:

' Interface ILinkable.cls
Public Sub LinkTo (controlToLink As ILinkable)
End Sub


In dem UserControl steht dann:

' Usercontrol cltServer.clt
Implements ILinkable
'
Private Sub ILinkable_LinkTo (controlToLink As ILinkable)
' Send or store data somewhere according to the control I am
End Sub


Soweit so gut. Wenn ich jetzt aber obiges Form_Load ausführe, dann
gibt es natürlich Fehler. Bei der Übergabe von ctlClient1 wird
bemàngelt, dass dies einen falschen Typ (nicht ILinkable) hat. Ich
bràuchte so eine Art explizite Typkonvertierung wie in C:
ctlServer.LinkTo ( (ILinkable) ctlClient )

Aber das gibts nicht. Aber was gibt es dann? Muss doch irgendwie
gehen?

Viele Grüße,
Johann
 

Lesen sie die antworten

#1 Dieter Strassner
21/06/2010 - 07:48 | Warnen spam
Hallo Johann,

ich habe ein paar verschiedene "benutzerdefinierte Steuerelemente" in
meinem Projekt bspw. ctlServer, ctlClient, ctlFileOutput. Alle drei
besitzen die Funktion LinkTo, mit der ich die UserControls
untereinander verknüpfen will. Die Funktion merkt sich dann intern in
einem Array, mit welchen UserControl-Instanzen sie verknüpft ist und
schickt da ggf. mal Daten hin. Das soll natürlich unabhàngig von deren
konkreten Typen funktionieren. Wenn ich ein paar Controls in meiner
Form platziere, dann möchte ich in Form_Load bspw. dies schreiben:

ctlServer1.LinkTo(ctlClient1)
ctlServer1.LinkTo(ctlFileOutput1)

Nun tritt hier natürlich schon das Problem auf, dass alle Controls
unterschiedlichen Typs sind. Ich dachte nun, man könnte allen ein
gemeinsames Interface verpassen. Aber leider komme ich nicht recht
weiter. Dies habe ich schon:

' Interface ILinkable.cls
Public Sub LinkTo (controlToLink As ILinkable)
End Sub





Das einfachste aus meiner Sicht wàre, Du definierst hier " as Object" in
der Funktion "LinkTo"

Zur typengerechten kann ein Kompilerschalter helfen. Wahlweise dann "as
Object" as "as Ilinkable" definieren und testen.
Zum Compilieren den Schalter wieder auf "as Object" umstellen.


Viele Grüße

Dieter


Rückfragen bitte nur in die Newsgroup!

EDV-Kommunikation Strassner e.K.
68623 Lampertheim
Internet: www.strassner.biz

Ähnliche fragen