【问题标题】:C# to VB.NET EventsC# 到 VB.NET 事件
【发布时间】:2014-03-25 20:41:39
【问题描述】:

我在将其翻译成 VB 时遇到问题:

public delegate void ChangeMessageEvent(string message);
public static event ChangeMessageEvent ChangeMessage = null;

这似乎也不起作用

if (oStatusManager.ChangeMessage != null)
        {
          oStatusManager.ChangeMessage(message);
          Application.DoEvents();

}

错误信息:

'Public Shared Shadows Event ChangeMes​​sage(message As String)' 是一个 事件,不能直接调用。使用“RaiseEvent”语句 引发事件。

VB 代码:

我使用 developer fusion 进行转换

这里没有下划线并表示:预期语句结束

Public Delegate Sub ChangeMessageEvent(message As String)
Public Shared Event ChangeMessage As ChangeMessageEvent = Nothing

If oStatusManager.ChangeMessage IsNot Nothing Then
    oStatusManager.ChangeMessage(message)
    Application.DoEvents()
End If

上面一行

'Public Shared Event ChangeMes​​sage(message As String)' 是一个事件, 并且不能直接调用。使用“RaiseEvent”语句来提高 一个事件。

【问题讨论】:

  • 正如错误消息所述。这是一个事件而不是方法。
  • 这在 C# 中完美运行我怎样才能让它在 VB 中运行?
  • 向我们展示您的 VB 代码。或许能告诉你它有什么问题。
  • 每次有人用Application.DoEvents,我都会哭一点,死一点。

标签: c# vb.net events


【解决方案1】:

两件事 - 删除“= Nothing”并使用隐藏的 VB 'Event' 字段 - 或完全删除条件,因为 VB 在 'RaiseEvent' 中进行检查:

Public Delegate Sub ChangeMessageEvent(ByVal message As String)
Public Shared Event ChangeMessage As ChangeMessageEvent

Private Sub test()
    If oStatusManager.ChangeMessageEvent IsNot Nothing Then
        RaiseEvent oStatusManager.ChangeMessage(message)
        Application.DoEvents()
    End If
End Sub

【讨论】:

  • 感谢您的回复,我仍然收到“委托类 'ChangeMes​​sageEvent' 与在类 'oStatusManager' 中为事件 'ChangeMes​​sage' 隐式声明的成员冲突。
  • 然后完全删除条件 - 即,您根本不需要“If oStatusManager ...”条件。
  • 我试过了,定义上还是一样的错误:Public Shared Event ChangeMes​​sage As ChangeMes​​sageEvent
  • 更改“ChangeMes​​sage”事件名称或更改“ChangeMes​​sageEvent”委托名称——VB隐藏字段“ChangeMes​​sageEvent”与委托名称冲突。
  • 问题是VB使用了一个与事件同名的隐藏字段,并添加了“事件”,所以如果你命名任何事件,你会遇到冲突。 VB 错误消息不太擅长说明这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多