2016-07-01 5 views
0

私は、動的に作成された配列やスタッフの画像を含むボタン、スタッフの名前を持っています。いずれかのボタンからのボタンクリックを処理するハンドラを1つ追加しました。私が立ち往生している場所は、以下のコードを見るとすべて正常に動作し、ボタンのいずれかをクリックすると "aha"というテストメッセージが表示されます。しかし、私はクリックしたスタッフの名前(btnArray(i).Text)を後で処理するためにハンドラに渡す必要があります。ハンドラにByValパラメータを追加しようとしましたが、エラーが発生しました。これを行う正しい方法は何ですか?私が言ったように、下のコードは私のために働く、私はちょうど余分な機能を追加する方法について紛失している。ボタン配列 - 共有ハンドラにパラメータを渡す方法

 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 

答えて

2

まず、共有ハンドラの署名を修正します。

クリックが完了すると、クリックされたテキストの取得は簡単です。

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

送信者は、クリックされたボタンです。シグネチャは送信者にオブジェクトを使用するため、DirectCastはボタンを「変更」し、ボタンの.Textプロパティにアクセスできます。

より多くの操作がある場合、あなたはこのよう

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 
それを行うことができますクリックしたボタンに実行したいです
関連する問題