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