Announcement

Collapse
No announcement yet.

Probleme mit dem dynamischen Erstellen von Controls

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

  • Probleme mit dem dynamischen Erstellen von Controls

    Hallo zusammen,

    irgendwie stehe ich auf dem Schlauch. Wenn ich ein Steuerelement dynamisch anlege reagiert mein Programm nicht auf manche Eigenschaften und ich verstehe nicht warum.

    Ich habe ein Formular auf dem eine Checkbox existiert, diese Checkbox möchte ich zur Laufzeit vervielfältigen. Hierzu benutze ich ich Moment folgenden Code.

    Die Checkbox erscheint auch, aber es fehlt die Möglichkeit die TextAlign Eigenschaft zu setzen. Weder über das Ctrl Objekt noch wenn ich achkMediumCDDB(MaxGrid) direkt anspreche. Das Programm bringt mir keinen Fehler er 'ignoriert' die Anweisung einfach.

    Was habe ich denn alles falsch gemacht?

    Gruß Womble

    Code:
    Public Class frmTonträger
        Public achkMediumCDDB() As CheckBox
    
    <hier fehler einige Zeilen>
    
        Private Sub btnNeuesMedium_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNeuesMedium.Click
            Dim Ctrl As Control
            MaxGrid = MaxGrid + 1
            ' chkMediumCDDB
            AddHandler achkMediumCDDB(MaxGrid).CheckedChanged, AddressOf chkMediumCDDB_CheckedChanged
            Me.achkMediumCDDB(MaxGrid).Name = "achkMediumCDDB(" & MaxGrid.ToString.Trim & ")"
            Me.frmMedium.Controls.Add(Me.achkMediumCDDB(MaxGrid))
            Ctrl = Me.frmMedium.Controls.Item(Me.frmMedium.Controls.IndexOfKey("achkMediumCDDB(" & MaxGrid.ToString.Trim & ")"))
            Ctrl.Top = chkMediumCDDB.Top
            Ctrl.Left = chkMediumCDDB.Left
            Ctrl.Size = chkMediumCDDB.Size
            Ctrl.Text = chkMediumCDDB.Text
            Ctrl.Visible = True
            Ctrl.BringToFront()
        End Sub
    End Class

  • #2
    Hallo,

    Dein Problem liegt darin, dass Du ctrl als (allgemeines) Control deklariert hast. Ein Control verfügt aber nicht über alle Eigenschaften; anders gesagt: eine CheckBox verfügt über zusätzliche Eigenschaften, z.B. TextAlign.

    Du hast vor allem zwei Möglichkeiten:

    1. Deklariere ctrl als eine Klasse, die möglichst weit oben in der Hierarchie steht. Wenn Du nur CheckBoxen verarbeiten willst, warum nimmst Du sie dann nicht? ButtonBase käme auch in Frage, aber Control eben nicht.
    Code:
    Dim ctrl As ButtonBase
    2. Füge eine Prüfung ein: Wenn das betreffende Control eine CheckBox ist, dann kann sie als solche verwendet werden. Dazu kann ich nur den C#-Code angeben, weil ich kein VB kann; aber so ähnlich geht es auch damit:
    Code:
    //  mit C#
    if (ctrl is CheckBox) {
        (ctrl as CheckBox).TextAlign = ContentAlignment.TopCenter;
    }
    Gruß Jürgen

    Comment


    • #3
      Hallo Jürgen,

      danke für die schnelle Antwort. Das mit dem CTRL als Control war Absicht, weil später noch Textboxen und ein DataGrid genauso behandelt werden sollen, aber wenn es nicht anders geht werde ich für jeden Typ eben eine eigene Variable anlegen.

      Gruß Womble

      Comment

      Working...
      X