VB.NET Button zur Laufzeit erstellen

VB.NET Button zur Laufzeit erstellen
VB.NET Button zur Laufzeit erstellen

VB.NET Button zur Laufzeit erstellen

In VB.NET einen Button zur Laufzeit erstellen kann als Anfänger schwierig sein, muss es mit meinem Beispiel jedoch nicht!

Ich werde Dir unter Anderem zeigen, wie wir die AddHandler-Anweisung dazu verwenden.

Zusätzlich benötigen wir den AddressOf-Operator, um an die jeweilige Adresse der Ziel-Methode zu kommen.

VB.NET Button Beispiel – Allgemein

Falls Du Dich bisher noch nicht allzu tiefgehend mit dem Button beschäftigt hast, empfehle ich Dir mein allgemeines Button Beispiel.

In diesem Beitrag erkläre ich alle Dir alles Wissenwerte über das Button-Control, wie z. B. Eigenschaften, Methoden und dessen Funktionsweise.

Der heutige Beitrag handelt hingegen von einem Thema, auf das man eher später – aber definitiv – stößt.

Normalerweise designt man seine Oberfläche ja für gewöhnlich in der dafür vorgesehenen Designer-Oberfläche, aber manchmal reicht dies nicht aus.

Der Button – Eine kleine Wiederholung

Button – eine kleine Wiederholung
Button – eine kleine Wiederholung

Unendliche Einsatzmöglichkeiten

Wie Du in meinem anderen Beitrag schon erfahren konntest, ist der Button so ziemlich eines der absoluten Basic-Controls.

Die Nutzungsmöglichkeiten sind schier unendlich:

  • Zum Drucken von Rechnungen
  • Öffnen eines Detail-Fensters
  • Das ausführen einer Suche
  • Bearbeitete Daten zu speichern
  • und viel viel mehr!

Das Click-Ereignis

Wenn Du Dich noch erinnern kannst, bzw. es vielleicht noch weißt, brauchen wir für die Verwendung des Buttons im Wesentlichen das wichtigste Ereignis: Das Click-Ereignis.

Verschiedene Button-Zustände

Auch mehr als bekannt, sind die verschiedenen Zustände, die der Button für gewöhnlich einnehmen kann.

Darunter sind wohl die gängigsten States, der „Hover„, „Disabled“ und „Loading“ State.

Etwas abwegiger, jedoch ein moderner Augenschmaus sind vor allem aus „Material-Design“ orientierten Steuerelementen bekannt, ist z. B. der „Ripple„-Effekt.

Wie der Name schon sagt eher ein Effekt und kein State, aber dennoch sehr gängig.

Moderne Button Zustände und Effekte
Moderne Button Zustände und Effekte

VB.NET Button zur Laufzeit erstellen

Im Laufe Deiner Visual Basic .NET Karriere, kann es durchaus vorkommen, dass Du einen Button auch mal zur Laufzeit erstellen möchtest, bzw. musst.

Ein konkreter mir einfallender Anwendungsfall wäre z. B. die dynamische Erstellung einer virtuellen Tastatur.

Stell Dir vor, Du schaltest in der virtuellen Tastatur auf einen anderen Modus – man kennt es z. B. von Handytastaturen.

Dann könntest Du die vorhandenen Buttons durch andere Buttons dynamisch ersetzen.

Auf Form-Ebene

Den Button auf Form-Ebene zu erstellen ist praktisch analog zum Weg über den Designer, jedoch eben nur pur Code-Datei basiert.

Der Code der Form

Konstruktor

Im Form-Konstruktor initialisieren wir den Button mit einer neuen Instanz.

Wir könnten dies auch alternativ auch im Load-Ereignis machen, allerdings macht es im Konstruktor für mich persönlich mehr Sinn.

Im Konstruktor wird – wer hätte das gedacht – konstruiert, primär die Form, aber auch all das was dazu gehört.

Darunter fallen natürlich auch die Kind-Elemente, zumindest wenn keine Dependency Injection o. Ä. verwendet wird..

Die letzte Zeile erkläre ich hier, im Teil der „WithoutHandlesClause„-Methode

WithHandlesClause – Click-Eventhandler

Diese Sub ist wie üblich via Handles-Klausel verknüpft, das geht deshalb, weil wir den Button auf Form-Ebene und mit WithEvents deklariert haben.

WithoutHandlesClause – Click-Eventhandler

Diese Methode wird dynamisch durch die AddHandler-Anweisung im Konstruktor mit dem Click-Event des Timers verknüpft.

Diese Vorgehensweise ist praktisch das Kernelement des ersten Beispiels.

Imports System.Diagnostics

Public Class Form1

    Private WithEvents Button As Button

    Sub New()
        InitializeComponent()
        Button = New Button()
        AddHandler Button.Click, AddressOf WithoutHandlesClause
    End Sub

    Private Sub WithHandlesClause(sender As Object, e As EventArgs) Handles Button.Click
        Debug.WriteLine("WithHandlesClause")
    End Sub

    Private Sub WithoutHandlesClause(sender As Object, e As EventArgs)
        Debug.WriteLine("WithoutHandlesClause")
    End Sub

End Class

Durch Button-Click

Hier zeige ich, wie man einen Button durch das Klicken eines weiteren Buttons erstellen kann.

Ebenso wie im vorherigen Beispiel, greife ich hier auf eine bereits existierende Methode in der Form zurück.

Wir instanziieren zuerst einen neuen Button, weisen Ihm anschließend einige Eigenschaften zu und fügen Ihn dann zur Darstellung der Form hinzu.

Private Sub btnCreateButton_Click(sender As Object, e As EventArgs)
    Dim button = new Button()
    button.Location = new Point(50, 80)
    button.Height = 23
    button.Width = 75
    button.Text = "Dynamic woohoo"
    AddHandler button.Click, AddressOf MyClick
    Controls.Add(button)
End Sub

Private Sub MyClick(sender As Object, e As EventArgs)
   System.Diagnostics.Debug.WriteLine("MyClick")
End Sub

VB.NET Button zur Laufzeit erstellen – Mit anonymen Handler

Im letzten Beispiel zeige ich Dir eine Vorgehensweise mit einer anonymen Handler-Methode.

Natürlich musst Du auch hier auf die korrekte Signatur der Methode, also der korrekten Anzahl und der richtigen Positionierung der Parameter achten.

Mit anonymer Sub

In diesem Fall brauchst Du den AddressOf-Operator nicht, da Du die Methode ja namentlich nennen und somit an Ihre „Adressekommen kannst.

Private Sub btnCreateButton_Click(sender As Object, e As EventArgs)
    Dim button = new Button()
    button.Location = new Point(50, 80)
    button.Height = 23
    button.Width = 75
    button.Text = "Dynamic woohoo"
    AddHandler button.Click, Sub(sender, e)
                                 Debug.WriteLine("anonymous")
                             End Sub
    Controls.Add(button)
End Sub

Mit anonymer Sub und Variable

Du hast sogar die Möglichkeit, diesen Handler in eine Variable zu stecken, bzw. zu speichern und dann via AddHandler zuzuweisen:

Private Sub btnCreateButton_Click(sender As Object, e As EventArgs)
    Dim button = new Button()
    button.Location = new Point(50, 80)
    button.Height = 23
    button.Width = 75
    button.Text = "Dynamic woohoo"
    Dim dynamicCreatedHandler = Sub(sender, e)
                                    Debug.WriteLine("anonymous")
                                End Sub
    AddHandler button.Click, dynamicCreatedHandler
    Controls.Add(button)
End Sub

Downloads

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert