Generische Klasse und CType

22/04/2008 - 18:11 von Tomasz Poplawski | Report spam
Hallo NG!

In meiner Anwendung (Windows.Forms) muss ich je nach Bedingung bestimmte
Controls ausblenden.

Ich habe es mir so vorgestellt:

Friend Class FormForHandling(Of T)
Private _frm As T

Public Sub New(ByRef frm As Form)
Me._frm = CType(frm, T)
End Sub

Friend ReadOnly Property frm() As T
Get
Return Me._frm
End Get
End Property
End Class

Damit erhalte ich Zugriff auf alle Controls und kann diese dann Ausblenden.


Aber:

An dieser Stelle Me._frm = CType(frm, T)
erhalte ich eine Fehlermeldung:

"Der Wert vom Typ "System.Windows.Forms.Form" kann nicht zu "T" konvertiert
werden."

Warum?

Danke im Voraus

Gruß

Tomasz Poplawski

PS Habe es inzwischen anders gelöst, frage mich aber warum das nicht geht?!
 

Lesen sie die antworten

#1 Elmar Boye
22/04/2008 - 19:42 | Warnen spam
Hallo Tomasz,

Tomasz Poplawski schrieb:
In meiner Anwendung (Windows.Forms) muss ich je nach Bedingung bestimmte
Controls ausblenden.



Wenn da nicht was ganz spezielles hinzukommt wàre die Klasse
nicht unbedingt erforderlich.
Zugriff auf die Controls-Auflistung erhàlst Du auch mit der Form-Basisklasse.
Und jedes Control unterstützt die Visible Eigenschaft.

Damit erhalte ich Zugriff auf alle Controls und kann diese dann Ausblenden.




Und um einen Satz von Steuerelementen auszublenden, könntest Du entweder
eine Liste von Control Steuerelementen oder eine Liste der Steuerelement-Namen
übergeben und die Elemente durch Setzen von Visible = False ausblenden.


Um die Ausgangsfrage noch zu beantworten:

Aber:

An dieser Stelle Me._frm = CType(frm, T)
erhalte ich eine Fehlermeldung:



Dafür benötigst Du einen Type Constraint für das Of T.
Wobei Du den Konstruktor gleich richtig schreiben solltest.
Da der Typ ja durch T festgelegt ist, kannst Du ihn auch
im Konstruktor verwenden.
Den allgemeinen solltest Du weglassen, der bringt keinen
Nutzen, ist eher gefàhrlich.

///
' T muss vom Type Form abgeleitet sein:
Friend Class FormForHandling(Of T As {Form})
Private _frm As T

' Dieser Konstruktor ist besser...
Public Sub New(ByVal frm As T)
Me._frm = frm
End Sub

' ... ist überflüssig und nur zur Illustration
Public Sub New(ByVal frm As Form)
Me._frm = DirectCast(frm, T)
End Sub

Friend ReadOnly Property Form() As T
Get
Return Me._frm
End Get
End Property
End Class
\\\

Gruß Elmar

Ähnliche fragen