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

c# – 使用互操作提升vb6事件

发布时间:2020-12-15 04:22:54 所属栏目:百科 来源:网络整理
导读:我有一个遗留的VB6组件,我使用tlbimp.exe导入到VS中以生成我的互操作程序集. VB6组件定义了一个允许我在VB6中传递消息的事件. Public Event Message(ByVal iMsg As Variant,oCancel As Variant) 我真的希望能够在我的C#程序中提高它,但它作为事件导入,而不是
我有一个遗留的VB6组件,我使用tlbimp.exe导入到VS中以生成我的互操作程序集. VB6组件定义了一个允许我在VB6中传递消息的事件.
Public Event Message(ByVal iMsg As Variant,oCancel As Variant)

我真的希望能够在我的C#程序中提高它,但它作为事件导入,而不是委托或其他有用的东西.所以,我只能听,但从不开火.有谁知道如何触发VB6中包含的事件? C#事件看起来像

[TypeLibType(16)]
[ComVisible(false)]
 public interface __MyObj_Event
 {
     event __MyObj_MessageEventHandler Message;
 }

遗憾的是我无法更改VB6代码.谢谢.

解决方法

在VB6中,事件只能从类(或表格,视情况而定)声明事件中引发.要强制在VB6中引发事件,您需要在类上公开一个方法来执行此操作.如果你没有源代码,那你就不走运了.

从文档中

RaiseEvent eventname [(argumentlist)]

The required eventname is the name of
an event declared within the module
and follows Basic variable naming
conventions.

例如

Option Explicit

Private FText As String

Public Event OnChange(ByVal Text As String)

'This exposes the raising the event

Private Sub Change(ByVal Text As String)
  RaiseEvent OnChange(Text)
End Sub

Public Property Get Text() As String
  Text = FText
End Property


Public Property Let Text(ByVal Value As String)
  FText = Value
  Call Change(Value)
End Property

很抱歉成为坏消息的承担者.

(编辑:李大同)

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

    推荐文章
      热点阅读