none
Dynamische Typenkonvertierung RRS feed

  • 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

    Donnerstag, 18. November 2010 13:52

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:

     Public Sub New(ByRef ParentForm As Object)
      AddHandler TryCast(ParentForm.mnuNew, ToolStripButton).Click, AddressOf mnuNew_Click
     End Sub
    
    
    Dabei muss beachtet werden, dass das Property "Modifiers" des Objektes "mnuNew" auf Public gesetzt ist.

    • Als Antwort markiert eipalittau Donnerstag, 18. November 2010 15:04
    Donnerstag, 18. November 2010 15:03

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
    Donnerstag, 18. November 2010 14:38
    Moderator
  • 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:

     Public Sub New(ByRef ParentForm As Object)
      AddHandler TryCast(ParentForm.mnuNew, ToolStripButton).Click, AddressOf mnuNew_Click
     End Sub
    
    
    Dabei muss beachtet werden, dass das Property "Modifiers" des Objektes "mnuNew" auf Public gesetzt ist.

    • Als Antwort markiert eipalittau Donnerstag, 18. November 2010 15:04
    Donnerstag, 18. November 2010 15:03
  • Ich habe jedoch soeben eine Möglichkeit gefunden:
    
    TryCast(ParentForm.mnuNew, ToolStripButton).Click, AddressOf
     mnuNew_Click
    
    Dabei muss beachtet werden, dass das Property "Modifiers" des Objektes "mnuNew" auf Public gesetzt ist.

    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
    Donnerstag, 18. November 2010 15:25
    Moderator