Announcement

Collapse
No announcement yet.

Property Grid Selected Object Cast

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Property Grid Selected Object Cast

    Hallo Entwickler Gemeinde,

    mein Problem in kürze:

    ** Ich nutze ein Property Grid um Nachrichten die über einen Seriellen Port gesendet werden zu konfigurieren, was auch gut klappt, da im Property Grid eben alle ENUM, sowie Properties die die Klasse hat angezeigt werden.

    Jetzt kann der Benutzer über einen Drop Down entscheiden welche Nachricht er konfigurieren möchte und diese wird dann in das Property Grid geladen.

    Jetzt das Problem.
    Das property Grid besitzt eine Event "PropertyValueChanged", und im e-Parameter erfahre ich welche Property sich nun geändert hat.
    Soweit auch noch kein Problem. Bzw ich ziehe das aktuelle Objekt nun Raus über Me.pg1.SelectedObject (pg1=PropertyGrid1)

    Jetzt würde ich gerne den Select Case umgehen, daß hier sozusagen

    Stings als Vergleich herangezogen werden z.B. "clsMsg_100", "clsMsg_101", ...

    FRAGE: Wie kann ich das abändern, daß wenn heute jemand die Klassennamen über Refactoring ändert, sich dieser Teil automatisch mit ändert.

    Gruß & Danke schonmal

    Code:
       
    
           Dim obj As Object = Me.pg1.SelectedObject
           Dim ot As System.Type = obj.GetType
    
            Dim Msg As String = ""
    
            Select Case ot.Name
    
                Case "clsMsg_100"
                    Dim TheNewObj As nsSentenceWriter.clsMsg_100
                    TheNewObj = Me.pg1.SelectedObject
                    Msg = TheNewObj.ToString
    
                Case "clsMsg_101"
                    Dim TheNewObj As nsSentenceWriter.clsMsg_101
                    TheNewObj = Me.pg1.SelectedObject
                    Msg = TheNewObj.ToString
    
                Case "clsMsg_102"
                    Dim TheNewObj As nsSentenceWriter.clsMsg_102
                    TheNewObj = Me.pg1.SelectedObject
                    Msg = TheNewObj.ToString
    
                Case Else
    
                    MsgBox(ot.Name, MsgBoxStyle.OkOnly, "Type Not Defined")
    
            End Select
    
    
            Me.WriteToSp(Msg)

  • #2
    GetType(clsMsg_100).Name

    So vielleicht?... War nur spontaner Gedanke... Keine Ahnung ob es funzt... ^^

    Comment


    • #3
      Jaaa, super Info und funzt. Ich habe ne menge mit GetType rumgespielt, jedoch nie so.

      Mehr so über die Object Methoden/Funktionen

      Aber, wie könnte man denn möglichst elegant wohl die ganze SelectCase umgehen

      Wie könnte ich denn sozusagen ein objekt genau diesen Typs anlegen, bzw auf die Überladenen ToString methode zugreifen ohne diesen ganzen Case Select Aufwand ?

      Comment


      • #4
        Ich sags mal mit Worten... ^^

        Jeder Msgklasse eine einheitliche Schnittstelle verpassen.

        Schau mal nach dem Schlagwort "Implements"...

        Ich nutze z.B. in meinen Klassen diese hier: "Implements IEditableObject"

        Vielleicht wirst Du über dieses Thema fündig...

        Comment


        • #5
          super Info, da waren Sie wieder meine Schwächen.

          Ich kümmere mich mal drum um die Schnittstellen, melde mich wieder.

          IEditableObject werde ich mir anschauen.

          Gruß & Danke

          Comment


          • #6
            IEditableObject
            ist nur ein Beispiel für eine Schnittstelle... Lieber nach
            Implements
            Ausschau halten...

            Comment


            • #7
              Ne, war klar, jedoch neuer Input ist immer gut.

              Man kann halt alt werden wie ne Kuh, man lernt immer noch dazu :-)

              Also danke nochmal.

              Ich bin dran.

              Comment


              • #8
                Gerne... Jop das stimmt... lernt nie aus... wäre ja auch langweilig...

                Comment

                Working...
                X