Announcement

Collapse
No announcement yet.

Controls dynamisch erstellen

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

  • Controls dynamisch erstellen

    Hallo,<br>
    ich fange gerade mit der Entwicklung von .NET-Applikationen (momentan VB.NET) für PDA's an und habe da mal eine Frage, zum dynamischen Erstellen von Controls.<br>
    Kann man zur Laufzeit neue Buttons und Edit-Felder erstellen? Falls ja, wie kann man das OnClick-Event der neuen Buttons abfangen?<br>
    <br>
    Danke für jegliche Hilfe!<br>
    <br>
    Ulrich

  • #2
    Hallo,

    ja - das sollte möglich sein. Die neue Control-Instanz wird jedoch erst dann sichtbar, wenn sie der <b>Controls</b>-Kollektion zugeordnet wird:

    <pre>

    ' Neues Eingabefeld für die Auslandsanschrift
    aNewTextBox = New TextBox()
    aNewTextBox.Size = New System.Drawing.Size(144, 20)
    aNewTextBox.Location = New System.Drawing.Point(24, 128)
    aNewTextBox.Name = "aNewTextBox"
    Me.Controls.Add(aNewTextBox)

    </pre>

    Für die Ereignisbehandlung ist auch bei den dynamischen Controls die Methode <b>AddHandler</b> zuständig (siehe InitializeComponent)

    Comment


    • #3
      Hallo Herr Kosch,<br>
      danke für die Hilfe (mal wieder ;-) ). Allerdings habe ich das Problem, dass es nicht funktioniert. Für "aNewTextBox.Size" / "*.Location" / "*.Name" erhalte ich die Fehlermeldung "The targeted version of the .NET Compact Framework does not support latebinding.".<br>
      Mit etwas Getrickse bin ich dann aber doch zu dem gewünschten Ergebnis gekommen:<br><br>
      <pre>
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

      Dim aNewTextBox = New System.Windows.Forms.TextBox
      Dim i As Integer

      Me.Controls.Add(aNewTextBox)
      i = Me.Controls.IndexOf(aNewTextBox)

      Me.Controls.Item(i).Size() = New System.Drawing.Size(80, 20)
      Me.Controls.Item(i).Location = New System.Drawing.Point(20, 30 + i * 25)
      AddHandler Me.Controls.Item(i).TextChanged, AddressOf MyOnClick
      End Sub

      Shared Sub MyOnClick(ByVal sender As Object, ByVal e As System.EventArgs)
      Dim tb As TextBox
      tb = sender
      MsgBox(tb.text)
      End Sub
      </pre>
      <br>
      Scheint zu funktionieren...<br>
      <br>
      Gruss<br>
      Ulric

      Comment

      Working...
      X