首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对象变量VB,VS的事件处理程序

对象变量VB,VS的事件处理程序
EN

Stack Overflow用户
提问于 2022-05-01 02:36:11
回答 1查看 47关注 0票数 0

使用VS设计器的Windows.Forms.Form时,我可以在窗体或子控件上激发KeyDown事件时使用它(我对RichTextBox感兴趣)。但是我想在变量类型RichTextBox上使用该事件,例如:

代码语言:javascript
运行
复制
Dim rtbx as new RichTextBox 
Sub rtbx_OnKeyDown(sender as object, e as KeyEventArgs) Handles rtbx.KeyDown 

VS不明白这一点。在OnKeyDown中列出了一个方法ObjectBrowser,它与RichTextBox的祖父母控件类相关联,但是我没有找到任何方法来调用这个方法。Microsoft文档中的示例只显示了从Form.vb类复制的代码。

EN

回答 1

Stack Overflow用户

发布于 2022-05-01 03:05:15

在VB中有两种附加事件处理程序的方法。一种是在字段中使用WithEvents关键字,在方法上使用Handles关键字。

代码语言:javascript
运行
复制
Private WithEvents myRichTextBox As RichTextBox

以及:

代码语言:javascript
运行
复制
Private Sub myRichTextBox_KeyDown(sender as object, e as KeyEventArgs) Handles myRichTextBox.KeyDown

当您在设计器中添加控件并让IDE生成事件处理程序时,它就是这样工作的。如果您查看设计器代码文件,您将看到为您添加的每个控件和组件以及每个声明的WithEvents声明的字段。如果这样做,则事件处理程序将保持与该字段的连接,即使您更改了该字段的值。

另一个选项是使用AddHandler关键字。这是通过局部变量附加事件处理程序时必须做的事情,因为它们显然不能被声明为WithEvents

代码语言:javascript
运行
复制
Private Sub myRichTextBox_KeyDown(sender as object, e as KeyEventArgs)

注意,该方法上没有Handles子句。然后:

代码语言:javascript
运行
复制
Dim myRichTextBox As New RichTextBox

'...

AddHandler myRichTextBox.KeyDown, AddressOf myRichTextBox_KeyDown

该事件处理程序将保持与对象的连接,虽然在某些情况下这并不是绝对必要的,但在您完成事件处理程序时,最好总是分离事件处理程序:

代码语言:javascript
运行
复制
RemoveHandler myRichTextBox.KeyDown, AddressOf myRichTextBox_KeyDown

为了做到这一点,您需要对对象的引用,因此您可以使用一个字段来存储它。如果只有一个对象,您还可以声明字段WithEvents并使用Handles。如果可能有多个对象,那么您可以使用一个列表,然后循环遍历该列表来分离事件处理程序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72073634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档