Announcement

Collapse
No announcement yet.

Namen der Controls dynamisch zusammensetzen

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

  • Namen der Controls dynamisch zusammensetzen

    Ich habe einige Controls (hauptsächlich Labels) auf meinem Form. Diese habe ich alle so benannt wie ein Feld in der Datenbank. Da es sich um nicht grad wenig Elemente handelt, würde ich das Dataset gerne per for-Schleife durchlaufen und den ausgelesenen Wert dem Control zuweisen. Ist sowas möglich?

    Die Sache mit Control.item("form1").control.item("l_Artikelbezei chnung_Nr1")... funktioniert leider nicht, da nicht alle Elemente das gleich Parent-Control haben.

    z.B. Datenbankeintrag:

    bezeichnung: Artikelbezeichnung
    wert: Buch

    Controlname: l_Artikelbezeichnung_Nr1

    also so, nur halt dynamisch: me.l_Artikelbezeichnung_Nr1.Text = wert

  • #2
    Hallo,

    ja das ist möglich. Schau dir mal die Überladung des Indexer für die Controls-Auflsitung an.

    Ein vermutlich besserer Entwurf wäre ein UserControl zu erstellen das die Labels hält und per Datenbindung die Wert-Zuweisung erledigen.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Hab es jetzt so probiert, funktioniert aber nicht:

      Code:
      Control.ControlCollection.Item("l_Artikelbezeichnung").text

      Comment


      • #4
        Originally posted by zschiki View Post
        Hab es jetzt so probiert, funktioniert aber nicht:

        Code:
        Control.ControlCollection.Item("l_Artikelbezeichnung").text
        Dein Control heißt doch l_Artikelbezeichnung_Nr1 oder?


        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Ja hab ich eigentlich auch im Quellcode so stehen

          Fehlermeldung erhalte ich folgende:

          Der Verweis auf den nicht freigegebenen Member Public Overrides ReadOnly Property Item(key As String) As System.Windows.Forms.Control erfordert einen Objektverweis.
          Muss dazu sagen, das ich wirklich nur die obere Zeile hinzugefügt habe und sonst nichts geändert habe...

          Comment


          • #6
            "funktioniert nicht" ist keine ausreichende Problembeschreibung: Meckert der Compiler oder knallt es zur Laufzeit? Wie lautet die Fehlermeldung? Oder gibt es keine Fehlermeldung, aber das Verhalten ist anders als erwartet? Bitte künftig genauer schreiben!

            In diesem Fall gibt es (neben Gü's Hinweis) eine eindeutige Ursache: Ein einzelnes Item ist vom Typ Control. Ein (beliebiges) Control hat aber keine Eigenschaft Text. Du musst deshalb erst noch prüfen, ob das Control vom erwarteten Typ ist, dann Casten, dann Text zuweisen. In Pseudo-Code (weil ich C# kann, aber nicht VB):
            Code:
            Dim o As Object = Control.ControlCollection.Item("l_Artikelbezeichnung")
            if (o is Label) then
               Label lbl = Cast(o as Label)
               lbl.Text = 'irgendwas'
            end if
            Jürgen

            Comment


            • #7
              Die genau Fehlermeldung habe ich (zeitgleich) oben gepostet

              Comment


              • #8
                Originally posted by zschiki View Post
                Die genau Fehlermeldung habe ich (zeitgleich) oben gepostet
                Richtig. Aber da es sich um einen generell geltenden dringenden Wunsch handelt, habe ich das nicht entfernt. Außerdem habe ich auf die wahrscheinliche Ursache hingewiesen. Jürgen

                Comment


                • #9
                  Leider bekomme ich bei der Zeile

                  Code:
                  Dim o As Object = Control.ControlCollection.Item("l_Artikelbezeichnung")
                  Noch die Fehlermeldung "der verweis auf einen nicht freigegebenen member erfordert einen objektverweis" die mir leider nichts sagt...

                  Comment


                  • #10
                    Hallo,

                    du darfst nicht Control verwenden sondern eine konkrete Instanz einer Klasse die von Control erbt.

                    Soll heißen:
                    Code:
                    Dim o As Object = Me.ControlCollection.Item("l_Artikelbezeichnung")
                    mfG Gü
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment


                    • #11
                      So funktioniert es jetzt:

                      Code:
                      For Each row As DataRow In Me.ds_produktionsdaten1.Tables(0).Rows
                        For Each item As Control In Controls.Find("l_" & row.Item("bezeichnung"), 1)
                          item.Text = row.Item("wert")
                        Next
                      Next
                      Danke für die Hilfe.

                      Comment

                      Working...
                      X