加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在VB.NET 2008中向AddHandler事件添加参数

发布时间:2020-12-17 07:18:42 所属栏目:百科 来源:网络整理
导读:我阅读了有关向AddHandler事件添加参数的所有当前帖子,但我无法将它们应用于我的情况. 在VB.NET 2008的MDI程序中,我有一个模块QuickSaleModule,它调用几个模态数据输入表单来向表中添加订单.发生这种情况时,会打开一个带有网格的表单,显示表中的所有订单.此
我阅读了有关向AddHandler事件添加参数的所有当前帖子,但我无法将它们应用于我的情况.

在VB.NET 2008的MDI程序中,我有一个模块QuickSaleModule,它调用几个模态数据输入表单来向表中添加订单.发生这种情况时,会打开一个带有网格的表单,显示表中的所有订单.此表单网格已与订单模块分开打开,因此表单和模块都不相互依赖,尽管它们是解决方案中同一项目的一部分.订单网格来自SQL查询.

在模块中,我定义了简单的事件:

公共事件RefreshGrid()

我在模块中的某个点提出它 – 在输入并保存订单后:

RaiseEvent RefreshGrid()

现在我在load事件中的网格表单中:

AddHandler QuickSaleModule.RefreshGrid,AddressOf RefreshMyGrid

对于RefreshMyGrid()处理程序,我有:

Public Sub RefreshMyGrid()
     DoReturnSetup() – a sub in the grid form
     removeHandler QuickSaleModule.RefreshGrid,AddressOf RefreshMyGrid
End Sub

这将调用SQL查询以使用新订单刷新gridform.可以在退出之前通过quickSaleModule添加许多订单,因此每次输入新订单时我都会调用该事件,因此删除处于关闭状态的处理程序是没有意义的.但是,这是我创建的第一个AddHandler事件.

这是我的问题:

>最重要的.如何将模块中的orderID作为参数传递给网格表单中的RefreshMyGrid处理程序?我想我可以使用全局变量,但我更喜欢更好的东西.现在作为一个事件新手,似乎我没有使用其他方法来调用事件.当我退出从网格表单调用的dataentry表单时,我使用with事件(带参数).但正如我所说,在这种情况下,没有任何联系.
>“removeHandler QuickSaleModule.RefreshGrid,AddressOf RefreshMyGrid”的位置是否正确?或者它应该是封闭事件的形式.
>最后,RefreshMyGrid需要公开吗?

解决方法

要将参数传递给事件,您应遵循将两个参数传递给事件的 .NET事件标准:发送方和事件参数.

为了传递可用数据,您需要创建自己的继承自EventArgs的类,然后将属性添加到此类.

例如,定义arguments类:

Public Class RefreshGridEventArgs
    Inherits EventArgs

    Public Property OrderId As Integer

    Public Sub New(wOrderId As Integer)
        MyBase.New()

        Me.OrderId = wOrderId
    End Sub
End Class

然后重新定义事件:

Public Event RefreshGrid(sender As Object,e As RefreshGridEventArgs)

接下来,重新定义此事件的引发方式:

' Replace 1 with the actual order id
    RaiseEvent RefreshGrid(Me,New RefreshGridEventArgs(1))

最后,在事件处理程序中,使用e.OrderId执行适当的逻辑.

要回答您的其他问题:

2)删除事件中的处理程序意味着事件只会被提升一次,这通常不是你想要的(有时这是有道理的,但这似乎不是一个).表单被关闭时也没有必要删除事件处理程序,因为它包含在表单中,但是如果表单由于某种原因实际上没有关闭的话,这样做也不会有什么坏处(某些东西挂在上面)在某处提到它).

3)除非外部呼叫者调用它,否则RefreshMyGrid不需要公开.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读