Vb.net 从事件y运行事件x

Vb.net 从事件y运行事件x,vb.net,visual-studio-2010,events,Vb.net,Visual Studio 2010,Events,(新手VB.NET问题) 下面是我简单的winforms背后的具体代码,我并不完全理解: Private Sub okButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles okButton.Click 'do something End Sub Private Sub MainForm_Enter(ByVal sender As System.Object, ByVal e As

(新手VB.NET问题)

下面是我简单的
winforms
背后的具体代码,我并不完全理解:

Private Sub okButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles okButton.Click
    'do something
End Sub

Private Sub MainForm_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Enter
    okButton_Click(Me, e) '<=== argumanets must be wrong 
End Sub
Private Sub-ok按钮\u单击(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理ok按钮。单击
“做点什么
端接头
Private Sub main form_Enter(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理MyBase.Enter
确定按钮\单击(我,e)“尝试以下操作:

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, keyData As System.Windows.Forms.Keys) As Boolean
    If (keyData And Keys.KeyCode) = Keys.Enter Then
        okButton.PerformClick()
        Return True
    End If
    Return MyBase.ProcessCmdKey(msg, keyData)
End Function
如果要将enter键与其他控件一起使用,可能需要在检查中排除某些控件,例如:

If (keyData And Keys.KeyCode) = Keys.Enter AndAlso Not Textbox1.Focused Then
请尝试以下方法:

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, keyData As System.Windows.Forms.Keys) As Boolean
    If (keyData And Keys.KeyCode) = Keys.Enter Then
        okButton.PerformClick()
        Return True
    End If
    Return MyBase.ProcessCmdKey(msg, keyData)
End Function
如果要将enter键与其他控件一起使用,可能需要在检查中排除某些控件,例如:

If (keyData And Keys.KeyCode) = Keys.Enter AndAlso Not Textbox1.Focused Then
我想您可以使用表单的属性。只需将它设置为所需的按钮,它就可以完成任务。 请注意,还有一个属性

回答您的活动问题:
sender
参数标记事件的发送者。通常,这是类的
Me
实例。在我看来,
Me
似乎是绝对正确的。
e
参数包含特定事件的
EventArgs
。如果在函数体中没有使用此参数,则此变量的内容无关紧要。您可以使用
Nothing
或只发送
EventArgs
(这就是您所做的)

关于你的评论:
EventArgs
是事件特定数据的基类。例如,如果您正在订阅鼠标事件,
e
将是一个。
MouseEventArg
类提供已按下的鼠标按钮以及触发事件时指针的坐标

在您的情况下,事件只有
EventArgs
,它们只提供有关事件的基本信息。似乎没有关于它的特别信息

注意:如果要将多个事件合并到一个回调中,可以将
e
设置为
EventArgs
类型,因为每个
e
都应该按照Microsoft指南从
EventArgs
继承。因此,您可以将按钮单击和鼠标移动组合到一个回调中,因为代理的签名匹配

一种比只将
Nothing
传递给目标Sub更好的方法是将两个回调组合成一个回调。您可以在VB.NET中使用多个
句柄执行此操作,如下所示:

Private Sub SomeSub(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles okButton.Click, MyBase.Enter
    'this is getting called on a okButton.Click and MyBase.Enter
End Sub
(向右滚动可查看控制柄)

请注意,您不需要调用第一个子集的第二个子集。所有内容都在一个子项中。

我想您可以使用表单的属性。只需将它设置为所需的按钮,它就可以完成任务。 请注意,还有一个属性

回答您的活动问题:
sender
参数标记事件的发送者。通常,这是类的
Me
实例。在我看来,
Me
似乎是绝对正确的。
e
参数包含特定事件的
EventArgs
。如果在函数体中没有使用此参数,则此变量的内容无关紧要。您可以使用
Nothing
或只发送
EventArgs
(这就是您所做的)

关于你的评论:
EventArgs
是事件特定数据的基类。例如,如果您正在订阅鼠标事件,
e
将是一个。
MouseEventArg
类提供已按下的鼠标按钮以及触发事件时指针的坐标

在您的情况下,事件只有
EventArgs
,它们只提供有关事件的基本信息。似乎没有关于它的特别信息

注意:如果要将多个事件合并到一个回调中,可以将
e
设置为
EventArgs
类型,因为每个
e
都应该按照Microsoft指南从
EventArgs
继承。因此,您可以将按钮单击和鼠标移动组合到一个回调中,因为代理的签名匹配

一种比只将
Nothing
传递给目标Sub更好的方法是将两个回调组合成一个回调。您可以在VB.NET中使用多个
句柄执行此操作,如下所示:

Private Sub SomeSub(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles okButton.Click, MyBase.Enter
    'this is getting called on a okButton.Click and MyBase.Enter
End Sub
(向右滚动可查看控制柄)


请注意,您不需要调用第一个子集的第二个子集。一切都在一个子系统中。

事件与您认为的不一样。@Mr.Steak…它是做什么的?(进一步的研究似乎建议我应该使用表单属性
Acceptbutton
?如果您有一个简单的对话框,使用
Acceptbutton
并处理
Close
事件(您只需检查If
DialogResult
If
OK
,然后执行您的操作)是一种明智的方法。事件与您认为的不同。@Mr.Steak…它做了什么?(进一步的研究似乎建议我应该使用表单属性
Acceptbutton
?如果您有一个简单的对话框,请使用
Acceptbutton
并处理
Close
事件(您只需检查if
对话框result
if
OK
然后执行操作)是一种明智的方法……您是否有任何进一步的参考资料来帮助我理解
e
?您说“e参数包含特定事件的
EventArgs
”好的-谢谢:我已经标记为答案,尽管我对事件还是有点迷茫……我现在正在学习的课程希望会有所帮助。我刚刚做了另一次编辑,显示了多个
句柄
来源……你有没有进一步的参考资料来帮助我理解
e
“e参数包含特定事件的
EventArgs
”好的-谢谢:我已经标记为答案,尽管我对事件仍然有点迷茫…我目前正在学习的课程希望会有所帮助。我刚刚做了另一次编辑,显示了多个
Handl