使用VS设计器的Windows.Forms.Form时,我可以在窗体或子控件上激发KeyDown事件时使用它(我对RichTextBox感兴趣)。但是我想在变量类型RichTextBox上使用该事件,例如:
Dim rtbx as new RichTextBox
Sub rtbx_OnKeyDown(sender as object, e as KeyEventArgs) Handles rtbx.KeyDown VS不明白这一点。在OnKeyDown中列出了一个方法ObjectBrowser,它与RichTextBox的祖父母控件类相关联,但是我没有找到任何方法来调用这个方法。Microsoft文档中的示例只显示了从Form.vb类复制的代码。
发布于 2022-05-01 03:05:15
在VB中有两种附加事件处理程序的方法。一种是在字段中使用WithEvents关键字,在方法上使用Handles关键字。
Private WithEvents myRichTextBox As RichTextBox以及:
Private Sub myRichTextBox_KeyDown(sender as object, e as KeyEventArgs) Handles myRichTextBox.KeyDown当您在设计器中添加控件并让IDE生成事件处理程序时,它就是这样工作的。如果您查看设计器代码文件,您将看到为您添加的每个控件和组件以及每个声明的WithEvents声明的字段。如果这样做,则事件处理程序将保持与该字段的连接,即使您更改了该字段的值。
另一个选项是使用AddHandler关键字。这是通过局部变量附加事件处理程序时必须做的事情,因为它们显然不能被声明为WithEvents。
Private Sub myRichTextBox_KeyDown(sender as object, e as KeyEventArgs)注意,该方法上没有Handles子句。然后:
Dim myRichTextBox As New RichTextBox
'...
AddHandler myRichTextBox.KeyDown, AddressOf myRichTextBox_KeyDown该事件处理程序将保持与对象的连接,虽然在某些情况下这并不是绝对必要的,但在您完成事件处理程序时,最好总是分离事件处理程序:
RemoveHandler myRichTextBox.KeyDown, AddressOf myRichTextBox_KeyDown为了做到这一点,您需要对对象的引用,因此您可以使用一个字段来存储它。如果只有一个对象,您还可以声明字段WithEvents并使用Handles。如果可能有多个对象,那么您可以使用一个列表,然后循环遍历该列表来分离事件处理程序。
https://stackoverflow.com/questions/72073634
复制相似问题