什么是事件参数“发送者”和“e”

时间:2012-12-18 09:06:40

标签: vb.net

我很难理解这些论点 它们是自动生成的,我不需要考虑太多,但如果我想从表单的其他部分调用其中一个事件,那么我需要为这些参数提供值 - 这并不容易,因为我仍然不确定他们的意思是什么

以下是我想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 个答案:

答案 0 :(得分:7)

DON&#39; T从代码的其他部分调用事件处理程序!这是非常草率的编码。使用您需要的参数创建一个单独的方法来执行您所需的操作,并从事件处理程序和表单的任何其他部分调用它,例如

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

发件人 e 参数是事件处理程序的标准签名。发件人是引发事件的对象, e 包含事件的数据。 .NET中的所有事件都包含这样的参数。

EventArgs 是所有事件参数的基类,并没有对事件说太多。有几个事件使用派生类来提供更多数据,例如。 KeyPress事件使用KeyEventArgs类,该类包含在其KeyChar属性中按下的实际键。

这是基本的.NET编程,您应该花些时间了解.NET事件和Windows窗体,而不是信任自动生成的代码

答案 1 :(得分:3)

Sender用于指定生成事件的对象,e是事件数据本身。 例如,通常当您单击“发件人”表单中的按钮时,该按钮将成为鼠标事件。

在你的情况下你可以简单地改变

Call stringButton_Click(Me, Me)

Call stringButton_Click(Nothing, EventArgs.Empty)

答案 2 :(得分: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

答案 3 :(得分:1)

最好将代码移动到单独的函数中,如上所述,但这是一个解决方法: call stringButton_Click(Nothing,Nothing)