Announcement

Collapse
No announcement yet.

Button Funktion mit Loop generieren

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

  • Button Funktion mit Loop generieren

    Hallo,

    Ich habe ein kleines Problem mit Buttons die ich zur Laufzeit generiere. Wie kann ich die Click funktion von jedem Button in einem Loop generieren.

    Hier mein Code:
    Code:
    For i As Integer = 0 To (strButtonNamesTopLevel.Count - 1)
    
                Buttons(i) = New System.Windows.Forms.Button()
                Buttons(i).Location = New System.Drawing.Point(CInt((81 * i + Me.Width / 60)), (12))
                Buttons(i).Text = strButtonNamesTopLevel(i)
                Buttons(i).Name = "Button " & i + 1
                Me.Controls.Add(Buttons(i))
    
    Next

  • #2
    Dem OnClick eine Methode zuweisen
    Christian

    Comment


    • #3
      Meinst du es so ?

      Code:
      AddHandler Buttons(i).Click, AddressOf Buttons1_click

      Comment


      • #4
        MyButton.Click = new EventHandler(FunctionToCall);
        Christian

        Comment


        • #5
          Das funktioniert nicht so richtig.

          Code:
          For i As Integer = 0 To (strButtonNamesTopLevel.Count - 1)
          
                      Buttons(i) = New System.Windows.Forms.Button()
                      Buttons(i).Location = New System.Drawing.Point(CInt((81 * i + Me.Width / 60)), (12))
                      Buttons(i).Text = strButtonNamesTopLevel(i)
                      Buttons(i).Name = "Button " & i + 1
                      Me.Controls.Add(Buttons(i))
          
                      MyButton(i).Click = New EventHandler(FunctionToCall)
          
          Next
          Ich möchte ja nicht jedes einzelne Click event deklarieren.

          Comment


          • #6
            Das funktioniert nicht so richtig.
            Ist kein Fehler.....

            Ggf. musst du allen die gleiche Methode zuweisen
            Christian

            Comment


            • #7
              MyButton(i).Click = New EventHandler(FunctionToCall)
              Das ist C# Syntax(fast, es müsste dort nur += und nicht = heißen). Dein angesprochener Weg über AddHandler war schon richtig gedacht.

              Comment


              • #8
                Jetzt bin ich völlig verwirrt.
                Kann ich den nicht etwas in dieser Art machen ?

                Code:
                AddHandler Buttons(i).Click = New EventHandler(AddressOf Buttons(i)_click)

                Comment


                • #9
                  Der VB Syntax ist halt so dämlich wie er ist und da gehört dann halt ein Komma hin und kein Gleichzeichen. Dein von dir gezeigte Syntax war schon richtig.

                  Hier ein Thread von vor ein paar Tagen mit dem selben Problemchen. Halt nur bezogen auf ToolstripItems und nicht auf Buttons.

                  Comment


                  • #10
                    Oh danke.

                    Sieht nun schon viel besser aus. Habs jetzt geschnallt mit dem Komma.
                    Jetzt nur noch eine Kleine Frage: Hab den Thread gelesen, aber das mit dem "sender" und "e" System.EventArgs schnall ich nicht. Wie finde ich heraus welcher gedrückt wurde ?

                    Ach ja VB Syntax ist wirklich dämlich "=" entspricht ","

                    Code:
                    Public Sub ButtonsGenerieren()
                    
                            For i As Integer = 0 To (strButtonNamesTopLevel.Count - 1)
                    
                                Buttons(i) = New System.Windows.Forms.Button()
                                Buttons(i).Location = New System.Drawing.Point(CInt(81 * i + Me.Width / 60), (12))
                                Buttons(i).Text = strButtonNamesTopLevel(i)
                                Buttons(i).Name = "Button " & i + 1
                    
                                Me.Controls.Add(Buttons(i))
                    
                                AddHandler Buttons(i).Click, New EventHandler(AddressOf ButtonTopLevel_click)
                    
                            Next
                    
                        End Sub
                    Code:
                        Public Sub ButtonTopLevel_click(ByVal sender As System.Object, ByVal e As System.EventArgs)
                    
                            If Buttons1 Then
                                lblAnzeige.Text = "Button 1"
                            ElseIf buttons2 Then
                                lblAnzeige.Text = "Button 2"
                            Else
                                lblAnzeige.Text = "Andere"
                            End If
                    
                        End Sub

                    Comment


                    • #11
                      Der Auslöser des Events steckt im Sender Parameter. Da irgendwer den Event ausgelöst haben könnte kann da nicht Button stehen sondern nur Object und du mußt erst prüfen ob der Sender den ein Button ist (wenn du nur Buttons behandelt willst) und dann entsprechend den sender auf einen Button Typ casten.

                      [Highlight=VB.Net]Public Sub ButtonTopLevel_click(ByVal sender As System.Object, ByVal e As System.EventArgs)
                      If TypeOf sender Is Button Then
                      Dim meinButton As Button = DirectCast(sender, Button)
                      'mach hier was mit meinButton
                      End If
                      End Sub[/Highlight]

                      Comment


                      • #12
                        Ist genau das was ich gesucht habe.
                        Jetzt komme ich eine grosses Stück weiter.

                        Danke hat mir sehr geholfen.

                        Comment

                        Working...
                        X