vb.net中的委托与事件

    委托是CTS(公共类型系统)规定的5种类型之一(类类型、结构类型、接口类型、枚举类型、委托类型)它是一种类型可以用来调用其他对象的方法,也称为函数指针。其实在vb.net中委托也可以当做是可以用来共享其他对象的方法的对象。当程序必须通过调用一个方法来执行某个操作(调用某个方法),但在编译时不知道该方法是什么时,就可以使用委托。委托允许在程序运行时指定调用的方法,委托的特点是面向对象的,类型是安全的。
委托的使用:

      首先创建一个委托:delegate {sub|function} DelegateType(参数1,参数2) 由于委托是一种类型所以在创建一个委托之后就是将它声明并实例化,第二步就是声明实例化委托并与对应方法绑定dim a as delegateType(Delegate sub),声明委托时注意它的参数类型与数量要跟创建的保持一致。第三就是用委托间接调用被委托的方法

例:

Public Class Form1

Delegate Sub fr(ByVal str As String) '创建一个委托
Dim a As New fr(AddressOf talk) '声明实例化委托并绑定被委托的方法:talk
 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        a.Invoke("hello")'运行指定的委托即间接调用talk方法
    End Sub
Public Sub talk(ByVal str As String)
        MsgBox(str)

    End Sub
End Class

委托在vb.net中的另一种形式:事件

       有了委托就可以透过方法来调用指定方法,这种指定不是编译时指定的而是在程序运行时指定,所以在面向对象程序设计中委托的出现可以说降低了类与类之间的耦合关系也就是实现了解耦。委托在面向对象程序中的最好应用就是事件。

       在vb.net中事件可以看成为一种特殊的委托,所以就可以将一些sub或function委托给事件,当某一方法触发事件时就会执行委托给该事件的sub或function。

vb.net中自定义事件:

Public Class Test1'自定义类
    
    Public Event speak(ByVal str As String) '自定义事件speak
    Public Sub Te(ByVal str As String) '定义触发事件函数
        RaiseEvent speak(str) '触发事件
    End Sub
End Class

Public Event speak(ByVal str As String)
等效于
Delegate Sub fr(ByVal str As String)
Public Event speak As fr

声明事件对象并将sub或function委托给事件:

方法一:

Module Module1
    Public WithEvents tea As New Test1() '声明事件对象
    Public Sub talk(ByVal str As String) Handles tea.speak '将talk委托给Test类中speak事件
        Console.WriteLine(str)
    End Sub
    Sub Main()
        tea.Te("hello") '执行Test1中触发speak事件的方法
    End Sub
End Module

方法二:

Module Module1
    Public tea As New Test1() '声明事件对象
    Public Sub talk(ByVal str As String)
        Console.WriteLine(str)
    End Sub
    Sub Main()
        AddHandler tea.speak, AddressOf talk '将talk方法委托给Test1类的speak事件
        tea.Te("hello") '执行Test1中触发speak事件的方法
    End Sub
End Module





  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
### 回答1: vb.net的webbrowser事件包括以下几种: 1. DocumentCompleted:当WebBrowser控件完成文档的加载时发生。 2. Navigating:在WebBrowser控件开始导航到新文档之前发生。 3. Navigated:在WebBrowser控件完成导航时发生。 4. ProgressChanged:在WebBrowser控件下载文档时发生。 5. NewWindow:当WebBrowser控件需要创建新窗口时发生。 6. FileDownload:在WebBrowser控件下载文件时发生。 7. DocumentTitleChanged:当WebBrowser控件的文档标题发生变化时发生。 8. StatusTextChanged:当WebBrowser控件的状态文本发生变化时发生。 以上就是vb.net的webbrowser事件。 ### 回答2: VB.NET的WebBrowser控件是一个非常有用的工具,可以用于在应用程序嵌入Web浏览器。WebBrowser控件可以让用户通过应用程序访问Web,从而实现在同一窗口同时使用Web和本地应用程序功能的便利性。WebBrowser控件既可以用于WinForms应用程序,也可以用于WPF应用程序,这就使得它成为许多应用程序开发者的首选控件。 在使用WebBrowser控件时,常常需要对一些事件进行响应。下面就列举了一些常见的WebBrowser事件及其用法。 1. DocumentCompleted事件: 该事件在WebBrowser控件所加载的文档完成加载后触发,一般用户在WebBrowser控件加载完毕后再进行一些操作。 2. Navigated事件: 该事件在WebBrowser控件开始导航到新页面时触发,可以获取新页面的URL等相关信息。 3. NewWindow事件: 该事件在WebBrowser控件要打开一个新窗口时触发,可以通过该事件来阻止打开新的窗口或者手动弹出一个新窗口。 4. ProgressChanged事件: 该事件在WebBrowser控件加载文档时显示加载进度,默认情况下在地址栏也会显示加载的进度,可以用该事件用代码获取进度。 5. BeforeNavigate2事件: 该事件在WebBrowser控件开始导航到新页面时触发,可以阻止WebBrowser控件导航到某个网址。 6. NavigateError事件: 该事件在WebBrowser控件导航到新页面失败时触发,可以检测导航失败时的错误信息。 在使用WebBrowser控件时,不同的应用场景需要对不同的事件进行响应。通过对WebBrowser事件的理解,可以更好地掌握WebBrowser控件的使用方法,让我们的应用程序更加完善和优秀。 ### 回答3: vb.net的WebBrowser控件是一种强大的工具,可以用来在窗体上嵌入浏览器。WebBrowser控件支持多种事件,这些事件可以使用户在浏览网页时获得更好的体验,也可以让程序员通过事件来控制浏览器的行为和判断浏览器的状态。 WebBrowser控件的常用事件包括: 1. Navigating:在开始导航前发生。可以用来拦截导航请求,处理一些额外的操作,比如修改URL或者取消导航请求。 2. Navigated:在导航完成时发生。此事件仅在文档已经完成加载并呈现后才会触发。可以在此事件获取或修改文档属性。 3. DocumentCompleted:在文档完全加载之后发生。可以在此事件获取或修改文档属性或者执行一些脚本。 4. ProgressChanged:在浏览器下载文档时发生。可以用此事件在用户界面上显示进度条或者其他信息。 5. NewWindow:在导航请求需要在新窗口打开时发生。可以用此事件拦截请求,将网页在当前窗口打开或打开新窗口。 6. BeforeNavigate2:在开始导航前发生。比Navigating事件更早发生。 7. BeforeScriptExecute:在WebBrowser控件执行JavaScript脚本之前发生。可以在此事件拦截JavaScript脚本,处理一些额外的操作。 除了以上常用事件外,WebBrowser控件还有其他事件,如TitleChanged、StatusTextChanged等。这些事件可以帮助我们更好的了解和控制WebBrowser控件的行为。通过使用WebBrowser控件的事件,我们可以开发出具有扩展性和自定义性的Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

steven-zx

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值