Benutzer mit den meisten Antworten
Dynamische Typenkonvertierung

Frage
-
Hallo Zusammen
Ich möchte den Typ "Form" während der Laufzeit ändern. Für den Moment habe ich dies mit einem "Select Case" gelöst:
Public Sub New(ByRef ParentForm As Form) Select Case ParentForm.Name Case "frmUser" AddHandler TryCast(ParentForm, frmUser).mnuNew.Click, AddressOf mnuNew_Click ... End Select End Sub
Ich möchte jedoch den TryCast dynamisch verändern. In etwa so:
TryCast(ParentForm, ParentForm.GetType)
Was für eine Lösung gibt es dazu?
Danke für eure Antwort
Antworten
-
Danke für Deine Antwort. Ein Interface ist nicht das, was ich suche. Ich möchte einzelne Anweisungen, welche in den verschiedenen Forms gleich sind, in eine Klasse auslagern. Bsp: Beim Klick auf den Button Neu, soll der selbige auf Enable=False gesetzt werden.
Ich habe jedoch soeben eine Möglichkeit gefunden:
Dabei muss beachtet werden, dass das Property "Modifiers" des Objektes "mnuNew" auf Public gesetzt ist.Public Sub New(ByRef ParentForm As Object) AddHandler TryCast(ParentForm.mnuNew, ToolStripButton).Click, AddressOf mnuNew_Click End Sub
- Als Antwort markiert eipalittau Donnerstag, 18. November 2010 15:04
Alle Antworten
-
Hallo,
Ich möchte jedoch den TryCast dynamisch verändern. In etwa so:
TryCast(ParentForm, ParentForm.GetType)
Was für eine Lösung gibt es dazu?
aus Deinem Beispiel lese ich eher heraus, dass Du für Deine Formulare ein gemeinsames Interface definieren und gegen dieses casten möchtest. Denn was bringt ein dynamischer Typ, wenn er unterschiedliche Eigenschaften und Methoden unterstützt?
Implements Keyword and Implements Statement
http://msdn.microsoft.com/en-us/library/4b3c4by9(VS.90).aspx
Du kannst hier dann prüfen, ob Dein Objekt ein bestimmtest Interface implementiert und gegen dieses casten:
If TypeOf myObj Is IMyInterface Then DirectCast(myObj, IMyInterface).Foo() End If
Ebenso wäre aber auch eine gemeinsame Basisklasse, die bereits einen Teil der Implementierung übernimmt.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Danke für Deine Antwort. Ein Interface ist nicht das, was ich suche. Ich möchte einzelne Anweisungen, welche in den verschiedenen Forms gleich sind, in eine Klasse auslagern. Bsp: Beim Klick auf den Button Neu, soll der selbige auf Enable=False gesetzt werden.
Ich habe jedoch soeben eine Möglichkeit gefunden:
Dabei muss beachtet werden, dass das Property "Modifiers" des Objektes "mnuNew" auf Public gesetzt ist.Public Sub New(ByRef ParentForm As Object) AddHandler TryCast(ParentForm.mnuNew, ToolStripButton).Click, AddressOf mnuNew_Click End Sub
- Als Antwort markiert eipalittau Donnerstag, 18. November 2010 15:04
-
Ich habe jedoch soeben eine Möglichkeit gefunden:
TryCast(ParentForm.mnuNew, ToolStripButton).Click, AddressOf mnuNew_Click
Das hat aber mit der Fragestellung absolut gar nichts mehr zu tun.
Generell finde ich deinen "Code" suboptimal bzw. auch deine Erklärung schwer verständlich.
> Ich möchte einzelne Anweisungen, welche in den verschiedenen Forms gleich sind, in eine Klasse auslagern.
Und warum fabrizierst Du dann so einen Kram?
Zum einen könntest Du dir eine eigene Form-Klasse ableiten, zum anderen kannst Du die Events ja auch in einem Interface deklarieren und dieses in deiner Klasse implementieren, ...
Ich persönlich finde, dass das aktuelle eher in die Schiene "von hinten durch die Brust ins Auge" gehört.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community