2016-07-01 2 views
0

Ich habe ein bisschen Code, wo ich ein dynamisch erstelltes Array oder Buttons mit Personalbildern auf ihnen habe, sowie den Namen des Mitarbeiters. Ich habe einen Handler hinzugefügt, um jeden Klick auf eine der Schaltflächen zu handhaben. wo ich feststecke ist, wenn du dir den Code unten anschaust, alles funktioniert gut, und wenn du auf irgendeinen der Knöpfe klickst, bekommst du die "Aha" Testnachricht. aber ich möchte den Namen der Mitarbeiter angeklickt (so btnArray (i) .Text) an den Handler für die weitere Verarbeitung übergeben werden. Ich habe versucht, einen ByVal-Parameter zum Handler hinzuzufügen, aber das verursachte einen Fehler. Was ist der richtige Weg dies zu tun? Wie ich sagte, funktioniert der Code unten für mich, ich bin nur ratlos, wie man die zusätzliche Funktionalität hinzufügt.Button Array - wie man einen Parameter an den shared handler übergibt

 Dim btnArray(staffcount) As System.Windows.Forms.Button 
    For i As Integer = 1 To staffcount - 1 
     btnArray(i) = New System.Windows.Forms.Button 
     btnArray(i).Visible = True 
     btnArray(i).Width = 80 
     btnArray(i).Height = 101 
     btnArray(i).BackgroundImage = Image.FromFile(picloc(i)) 
     btnArray(i).BackgroundImageLayout = ImageLayout.Stretch 
     btnArray(i).Text = staffname(i) 
     Dim who As String 
     who = btnArray(i).Text 
     AddHandler btnArray(i).Click, AddressOf Me.theButton_Click 
     btnArray(i).ForeColor = Color.White 
     btnArray(i).TextAlign = ContentAlignment.BottomCenter 

     Dim fnt As Font 

     fnt = btnArray(i).Font 

     btnArray(i).Font = New Font(fnt.Name, 10, FontStyle.Bold) 


     FlowLayoutPanel1.Controls.Add(btnArray(i)) 
    Next i 
End Sub 

Private Sub theButton_Click() 
    MsgBox("aha") 

End Sub 

Antwort

2

Korrigieren Sie zunächst die Signatur Ihres freigegebenen Handlers.

Private Sub theButton_Click(sender As Object, e As EventArgs) 

End Sub 

Sobald das ist immer der Text des angeklickten Taste erfolgt eine einfache Sache ist.

Private Sub theButton_Click(sender As Object, e As EventArgs) 
    Dim textOfButtonClicked As String = DirectCast(sender, Button).Text 
    MessageBox.Show(textOfButtonClicked) 
End Sub 

Der Absender ist die Schaltfläche, auf die geklickt wurde. Da Signaturen Objekte für den Absender verwenden, ändert der DirectCast sie in Schaltfläche und Sie können dann auf die Eigenschaft .Text der Schaltfläche zugreifen.

Wenn es mehr Manipulationen sind Sie auf der geklickt Schaltfläche ausführen möchten können Sie es auf diese Weise tun

Private Sub theButton_Click(sender As Object, e As EventArgs) 
    Dim whBtn As Button = DirectCast(sender, Button) ' get reference to button clicked 
    Dim textOfButtonClicked As String = whBtn.Text 
    MessageBox.Show(textOfButtonClicked) 
    'e.g. change the color 
    whBtn.BackColor = Color.LightYellow 
End Sub 
Verwandte Themen