8

Winform コントロールのパラメーターの目的について混乱していsenderます。たとえば、次のようになります。

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

End Sub

sender次のように何かを行うことで、何が保持されているかを確認できることを理解しています:

If TypeOf sender Is Label Then
 'Execute some code...
End If

しかし、サブルーチンを生成するときにすべてのコントロールに送信者が含まれる正当な理由はありますか? つまり、フォームをダブルクリックすると、Private Sub form_load (sender....) e As System.EventArgが表示されます。

これら 2 つのパラメーターの一般的な使用法は何ですか? それらは常に必要ですか?

ありがとうございました、

ダヤン D.

4

3 に答える 3

18

senderイベントの送信者が含まれているため、1 つのメソッドが複数のコントロールにバインドされている場合は、それらを区別できます。

たとえば、10 個のボタンがあり、それらのテキストを「You clicked me!」に変更したいとします。それらの 1 つをクリックすると、毎回異なるボタン名を使用して、それぞれに対して 1 つの個別のハンドラーを使用できますが、それらすべてを一度に処理する方がはるかに優れています。

Private Sub Button_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click, Button5.Click, Button6.Click, Button7.Click, Button8.Click, Button9.Click
    DirectCast(sender, Button).Text = "You clicked me!"
End Sub
于 2012-07-29T21:52:32.503 に答える
5

e使用されたイベントのイベント引数を参照します。通常、それらはその上で使用できるようになるプロパティ/関数/メソッドの形式で提供されます。

この例では、ラベル テキスト プロパティにはGridView、イベント引数パラメーターのプロパティとして送信された行から決定された FooterRow がデータを GridView DataSource にバインドするときに、フッター スタイルに設定された BorderColor が含まれます。

Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
        If e.Row.RowType = DataControlRowType.Footer Then
            lblFooterColor.Text = e.Row.Style("BorderColor")
        End If
End Sub
于 2012-07-29T22:29:37.947 に答える
2

質問の前半について:

senderコールバックが複数のイベントを処理するときに、どのオブジェクトがイベントを発生させたかを知るために使用されます。

たとえば、同じコードを 2 つのコールバック関数にカット アンド ペーストする代わりに、同じコードで 2 つの異なるボタン クリック イベントを管理できます。

Private Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click
   Dim s As String
   If sender Is Button1 Then
      s = "button1"
   ElseIf sender Is Button2 Then
      s = "button2"
   End If
   MessageBox.Show("You pressed: " + s)
End Sub

ここを参照してください。

于 2016-01-14T11:43:21.953 に答える