You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用户控件内置TextBox的TextChanged事件C#代码转VB.NET报错求解

报错原因

你遇到的报错是VB.NET和C#的事件语法差异导致的:C#允许直接访问事件字段做非空判断再调用Invoke触发,而VB.NET中禁止直接对事件名做空值判断,也没有事件名.Invoke的用法。同时你转换的代码还缺失了用户控件必需的继承声明。

正确的VB.NET实现代码

' 显式导入特性所在的命名空间
Imports System.ComponentModel

<DefaultEvent("_TextChanged")>
Public Class UserControl3
    ' 必须显式声明继承UserControl
    Inherits UserControl

    ' 声明自定义暴露的TextChanged事件
    Public Event _TextChanged As EventHandler

    Private Sub textBox1_TextChanged(sender As Object, e As EventArgs) Handles textBox1.TextChanged
        ' VB用RaiseEvent触发事件,内部自动判断是否有订阅者,无需手动判空,不会抛出空引用异常
        RaiseEvent _TextChanged(sender, e)
    End Sub
End Class

补充说明

如果确实有需要先判断事件是否存在订阅者的场景,可以访问VB为事件自动生成的后台字段,命名规则为事件名+Event后缀:

If _TextChangedEvent IsNot Nothing Then
    RaiseEvent _TextChanged(sender, e)
End If

这个写法和你C#代码中的空值判断逻辑完全等价,常规场景下直接用RaiseEvent即可,不需要额外判空。


内容的提问来源于stack exchange,提问作者Jose Andres Martinez Perez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:45:04