5

私はこれらの議論を理解するのに苦労しています。
それらは自動的に生成され、あまり考える必要はありませんが、フォームの他の部分からこれらのイベントの1つを呼び出したい場合は、これらの引数に値を指定する必要があります-まだわからないので簡単ではありませんそれらが何を意味するか。

これが私がしたいイベントですCall

Private Sub stringButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles stringButton.Click
    Dim outString As String
    Select Case stringTextBox.Text
        Case ""
            outString = "You entered an empty string"
        Case "10"
            outString = "10"
        Case Else
            outString = "Your string is not covered by the cases"
    End Select
    strResultTextBox.Text = outString
End Sub

呼び出しメソッドは次のとおりです。

Private Sub stringTextBox_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles stringTextBox.KeyDown
    If e.KeyCode = Keys.Enter Then
        Call stringButton_Click(Me, Me) '<<(Me,Me) is my incorrect attempt
    End If
End Sub

どのような引数を使用する必要があり、その理由は何ですか?

4

4 に答える 4

9

コードの他の部分からイベント ハンドラを呼び出さないでください。これは非常にずさんなコーディングです。必要なパラメーターを使用して、必要なことを行う別のメソッドを作成し、イベント ハンドラーとフォームの他の部分の両方から呼び出します。

Private Function String GetResponseMessage(ByVal input as String)
    Select Case input
        Case ""
            Return "You entered an empty string"
        Case "10"
            Return "10"
        Case Else
            Return "Your string is not covered by the cases"
    End Select
End Function

Private Sub stringButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles stringButton.Click
    Dim outString As String=GetResponseMessage(stringTextBox.Text)
    strResultTextBox.Text = outString
End Sub

senderおよびe引数は、イベント ハンドラーの標準シグネチャです。Sender はイベントを発生させたオブジェクトで、eにはイベントのデータが含まれています。.NET のすべてのイベントには、このような引数が含まれています。

EventArgsは、すべてのイベント引数の基本クラスであり、イベントについてはあまり言及していません。いくつかのイベントは派生クラスを使用して、より多くのデータを提供します。KeyPressイベントは、KeyCharプロパティに押された実際のキーを含む KeyEventArgs クラスを使用します。

これは基本的な .NET プログラミングの内容であり、自動生成されたコードを信頼するのではなく、.NET イベントと Windows フォームを理解することに時間を費やす必要があります。

于 2012-12-18T09:13:11.643 に答える
3

Sender は、イベントを生成したオブジェクトを指定するために使用されます。e はイベント データそのものです。たとえば、通常、フォームのボタンをクリックすると、「sender」がボタンになり、e がマウス イベントになります。

あなたの場合、あなたは単に変更することができます

Call stringButton_Click(Me, Me)

Call stringButton_Click(Nothing, EventArgs.Empty)
于 2012-12-18T09:10:35.987 に答える
1

これを行うには、新しいメソッドを作成します。イベント ハンドラを呼び出さないでください。

Public sub abcd()
Dim outString As String
Select Case stringTextBox.Text
    Case ""
        outString = "You entered an empty string"
    Case "10"
        outString = "10"
    Case Else
        outString = "Your string is not covered by the cases"
End Select
strResultTextBox.Text = outString
end sub

必要な場所からこのメソッドを呼び出します

Private Sub stringButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles stringButton.Click
abcd()
End Sub

そしてこれから

Private Sub stringTextBox_KeyDown(ByVal sender As System.Object, ByVal e As 
 System.Windows.Forms.KeyEventArgs) Handles stringTextBox.KeyDown
If e.KeyCode = Keys.Enter Then
    abcd()
End If
End Sub
于 2012-12-18T09:23:01.060 に答える