Button Clickevent hinzufügen funktioniert nicht

Sp1r1t

Mitglied
Hallo,

ich habe ein Problem mit dem Hinzufügen von Click events zu Buttons.

Zum Aufbau des Projektes:
Ich habe mich von dem grafischen Anpassen mit Buttons und Textfeldern distanziert und die jeweiligen Element per Code hinzugefügt. Dadurch ist es einfacher später neue Elemente hinzuzufügen.
Einen Button füge ich mit folgendem Code ein:

Code:
Dim shortbtnsteam As New Button
shortbtnsteam.Text = "Open Steam Folder"
shortbtnsteam.FlatStyle = FlatStyle.Flat
shortbtnsteam.Width = 240
shortbtnsteam.Height = 30
shortbtnsteam.Location = New Point(4, 17)
gbshortcut.Controls.Add(shortbtnsteam)

Da ich diesen Button über Code generiere kann ich nicht einfach Doppelklick auf ihn machen um den EventHandler zu generieren. Nun hab ich das Problem:

Wenn ich das ganze so schreibe:
Code:
Private Sub shortbtnsteam_Click(sender As Object, e As EventArgs) Handles shortbtnsteam.Click
        'Do something
End Sub

Wird mir allerdings "shortbtnsteam.Click" unterstrichen und in der Fehlerliste steht folgendes:

"BC30506 | Die Handles-Klausel erfordert eine WithEvents-Variable, die im enthaltenden Typ oder einem seiner Basistypen definiert wird."

Ich habe das ganze auch schon quer durch Google gejagt hab aber bisher noch nichts brauchbares gefunden.

würde mich freuen wenn da jemand eine hilfreichen Tipp hat.
vielen Dank schon mal im voraus.

Mit freundlichen Grüßen

Sp1r1t
 
Generell solltest du den Event auf den Namen des Button setzen und nicht auf den Variablennamen desselben.
Oder du deklarierst die Variable mit Events.
Code:
Dim withEvents shortbtnsteam As Button

Aber, Handles kenne ich unter VB6, VBA oder VBScript nicht. Kann es sein, dass es sich um VB.NET handelt? Wenn ja, dann werde ich den Thread verschieben, weil das da wahrscheinlich anderst gehandhabt wird.
 
Hallo,

ja in der Tat handelt es sich um VB.NET, es tut mir leid, dann hab ich wohl das Falsche Forum erwischt. Ich bitte um Verschiebung des Threads.
Ich kann jetzt nicht beurteilen in wie weit deine Antwort jetzt noch hilfreich ist.

Mit freundlichen Grüßen

Sp1r1t
 
Hallo,
ich habe etwas gebraucht bis ich herausgefunden hatte, dass man die einzelnen Buttons vor bzw. außerhalb der Load Function definieren muss.

Der Code muss so aussehen, dann funktioniert alles einwandfrei

Code:
Public Class Main

    Public WithEvents shortbtnsteam As New Button

    Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.Text = "Programm Name"
        Me.Icon = My.Resources.logo_roh
        Me.Width = 853
        Me.Height = 480
        Me.FormBorderStyle = FormBorderStyle.Fixed3D

        shortbtnsteam.Text = "Button"
        shortbtnsteam.FlatStyle = FlatStyle.Flat
        shortbtnsteam.Width = 240
        shortbtnsteam.Height = 30
        shortbtnsteam.Location = New Point(4, 17)
        gbshortcut.Controls.Add(shortbtnsteam)
    End Sub

    Private Sub shortbtnsteam_Click(sender As Object, e As EventArgs) Handles shortbtnsteam.Click
        'do something
    End Sub
End Class


vielen Dank für die Hilfestellungen.

Mit freundlichen Grüßen

Sp1r1t
 
Ich würde das erstellen der Buttons, in eine Funktion packen, so kannst bequem beliebig viele Buttons erstellen.
Code:
    Private Sub CreateButtons()
        Controls.Add(MyButton("ButtonTest1", "ButtonTest1", New Size(100, 23), New Point(0, 0), Color.Black))
        Controls.Add(MyButton("ButtonTest2", "ButtonTest2", New Size(100, 23), New Point(0, 27), Color.Black))
    End Sub

    ''' <summary>
    ''' Create a Button
    ''' </summary>
    ''' <param name="name">Button.name as String</param>
    ''' <param name="text">Button.Text as String</param>
    ''' <param name="size">Button.Size As Size</param>
    ''' <param name="location">Button.Location as Point</param>
    ''' <param name="foreColor">Button.ForeColor as Color</param>
    ''' <returns>Button</returns>
    Private Function MyButton(ByVal name As String,
                              ByVal text As String,
                              ByVal size As Size,
                              ByVal location As Point,
                              ByVal foreColor As Color) As Button
        Dim btn As New Button
        With btn
            .Name = name
            .Text = text
            .Size = size
            .Location = location
            .ForeColor = foreColor
        End With
        AddHandler btn.Click, AddressOf MyButton_Click ' Add Handler
        Return btn
    End Function

    Private Sub MyButton_Click(sender As Object, e As EventArgs)
        Dim btn As Button = DirectCast(sender, Button)
        Select Case btn.Name
            Case = "ButtonTest1"
                MessageBox.Show(btn.Text)
            Case = "ButtonTest2"
                MessageBox.Show(btn.Text)
        End Select
    End Sub
 
Zurück