Controls.Add Buttons Click | .NET Framework 4.6

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Dominik1806.

    Controls.Add Buttons Click | .NET Framework 4.6

    Guten Tag,
    ich habe einen Button mit diesem Code erstellt:

    Quellcode

    1. Dim JaEntscheidung As New Button
    2. Dim NeinEntscheidung As New Button
    3. Me.Controls.Add(JaEntscheidung)
    4. With JaEntscheidung
    5. .FlatAppearance.BorderSize = 0
    6. .FlatStyle = FlatStyle.Popup
    7. .ForeColor = Color.Red
    8. .Font = New Font("Neon Lights", 20, FontStyle.Regular)
    9. .TextAlign = ContentAlignment.MiddleCenter
    10. .BackColor = Color.FromArgb(66, 66, 66)
    11. .Text = "Ja!"
    12. .Size = New Size(150, 50)
    13. .Margin = New Padding(8, 8, 3, 3)
    14. .BringToFront()
    15. .Location = New Point(180, 250)
    16. End With
    17. JaEntscheidung = New Button


    Ich möchte jetzt, dass wenn man auf den Button klickt das eine Msgbox ausgeführt wird.

    Wie machen ich das?

    P.S.: Habe so etwas schon ausprobiert, aber ohne Erfolg

    Quellcode

    1. AddHandler JaEntscheidung.Click, AddressOf JaEntscheidung_Click
    Hmm, bei mir funktionierts!

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Public Class Form1
    2. Private m_Buttons() As Button = {}
    3. Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
    4. For Each OneProcess As Process In Process.GetProcesses
    5. ' Get the index for the new control.
    6. Dim i As Integer = m_Buttons.Length
    7. ' Make room.
    8. ReDim Preserve m_Buttons(i)
    9. ' Create and initialize the control.
    10. m_Buttons(i) = New Button
    11. With m_Buttons(i)
    12. .Name = "TextBox" & i.ToString()
    13. .Text = OneProcess.ProcessName + i.ToString
    14. If m_Buttons.Length < 2 Then
    15. ' Position the first one.
    16. .SetBounds(8, 8, 75, 23)
    17. Else
    18. ' Position subsequent controls.
    19. .Left = m_Buttons(i - 1).Left
    20. .Top = m_Buttons(i - 1).Top + m_Buttons(i - 1).Height + 4
    21. .Size = m_Buttons(i - 1).Size
    22. End If
    23. ' Save the control's index in the Tag property.
    24. ' (Or you can get this from the Name.)
    25. .Tag = i
    26. End With
    27. ' Give the control an event handler.
    28. AddHandler m_Buttons(i).Click, AddressOf _button_Clicked
    29. ' Add the control to the form.
    30. FlowLayoutPanel1.Controls.Add(m_Buttons(i))
    31. Next
    32. End Sub
    33. Private Sub _button_Clicked(ByVal sender As Object, ByVal e As System.EventArgs)
    34. MessageBox.Show("Hi", "Hi")
    35. End Sub
    36. End Class
    Ich kenne mit mit VB6 nicht aus (sieht aber aus wie VB.Net), ich tippe daher mal, dass dein "JaEntscheidung = New Button" am Ende der Zeile mit der Platzierung das Problem ist. Hier instanzierst du einen neuen "leeren" Button, dem du danach nen Event Zuweist (Add handler)

    Mach mal das "JaEntscheidung = New Button" am Ende nach "End With" weg und teste es nochmal.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @Dominik1806 Willkommen im Forum. :thumbup:
    • Benenne diesen Deinen Thread bitte um in VB.NET und gib das von Dir verwendete Framework an.
    • Mach Dir eine Form, zieh da einen Button drauf und doppelklicke auf den.
      Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Dim JaEntscheidung As New Button
    2. With JaEntscheidung
    3. .ForeColor = Color.Red
    4. .Text = "Ja!"
    5. .Size = New Size(150, 50)
    6. .Location = New Point(255, 50)
    7. End With
    8. AddHandler JaEntscheidung.Click, AddressOf buttoncliking
    9. Me.Controls.Add(JaEntscheidung)
    10. End Sub
    11. Private Sub buttoncliking()
    12. MessageBox.Show("test")
    13. End Sub


    Klappt wunderbar. Aber wieso machst du die Buttons zur Laufzeit und nicht im im Designer?!
    Hier könnte meine Signatur stehen.
    Viel Dank Leute.

    @mrMo deine Lösung hat funktioniert.

    @RodFromGermany habe den Thread nun in Vb.Net umbenannt. Ich wusste nicht, dass es Vb.Net ist, aber werde es mit nun merken.

    @RodFromGermany @mox ich benutze deshalb keine Buttons an dieser Stelle, weil meine Form schon voll mit Panels ist. Ich bin noch eher ein Anfänger :/

    Dominik1806 schrieb:

    weil meine Form schon voll mit Panels ist
    Dann ist das ein krasses Fehldesign.
    Willst Du denn Deine Butten "in die Luft" hängen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    "in die Luft"


    RodFromGermany schrieb:

    Willst Du denn Deine Butten "in die Luft" hängen?


    Wie meinst du das?

    Meine Projekt soll keine weiteren Formen habe. Alles soll auf einer Form passieren. Dazu habe ich die Buttons nun in eine Methode geschrieben, so das ich diese ja nur aufrufen muss und immer wann ich will die Funktion nutzen kann. Finde das praktisch.

    gyazo.com/836fcb466de8f6da8da936728e71af3f
    So sieht die Form aus

    Insgesamt verwende ich momentan 3 Panels, wobei das obere halt der Header ist und darunter ist nichts

    Dominik1806 schrieb:

    Wie meinst du das?
    Du packst sie irgendwo auf Dseine Form und holst sie in den Vordergrund. Suboptimal. :/
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Dominik1806 dies:

    VB.NET-Quellcode

    1. .BringToFront()
    2. .Location = New Point(180, 250)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ah ok, jetzt weiß ich was du meinst.

    Und zwar ist das so, dass der Button ja erstellt wird und sonst oben links erscheint. Ebenfalls wenn ich den Button nicht nach vorne hole, wird er vom Hintergrund verdeckt

    Dominik1806 schrieb:

    wird er vom Hintergrund verdeckt
    Da wäre ich nie drauf gekommen. :thumbsup: :thumbsup: :thumbsup:
    Deine Herangehensweise an eine GUI ist suboptimal.
    Mach das alles im Desgner. Nutze Panels zum Gruppieren der Elemente.
    Wenn Du Objekte "hintereinander" anordnen musst, nutze ein TabControl. Dies kann man auch ohne Reiter darstellen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dominik1806 schrieb:

    meine Methode beibehalten
    dann allerdings ohne meine Hilfe. :/
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!