【问题标题】:Please guide on c# equivalent stuff of VB.NET (new to vb.net)请指导 VB.NET 的 c# 等效内容(vb.net 的新手)
【发布时间】:2014-08-12 05:25:43
【问题描述】:

任何人都可以与我分享 vb.net 中的以下代码。

public class Class1 : ComboBox
{
    public event ItemCheckEventHandler ItemCheck;

    public class f
    {
        private Class1 c;

        public f(Class1 c1)
        {
            c = c1;
            c.ItemCheck += c_ItemCheck;
        }

        void c_ItemCheck(object sender, ItemCheckEventArgs e)
        {
            c.ItemCheck(sender, e);
        }
    }
}

Bellow 是等效的(转换后的代码):

Public Class Class1
    Inherits ComboBox

    Public Event ItemCheck As ItemCheckEventHandler
        Public Class f
        Private c As Class1

        Public Sub New(c1 As Class1)
            c = c1
            AddHandler c.ItemCheck, AddressOf c_ItemCheck
        End Sub

        Private Sub c_ItemCheck(sender As Object, e As ItemCheckEventArgs)
            RaiseEvent c.ItemCheck(sender, e)  
        End Sub
    End Class
End Class

问题:c# 工作正常,但在转换后的代码中,RaiseEvent 语句给出以下错误:

  1. c 不是 app.f 的事件
  2. 预期语句结束

谁能告诉我正确的语法。

谢谢

【问题讨论】:

  • 你是如何在一个类里面定义一个类的?
  • 它和上面的例子一样。在 c# 中工作的类中的类。但是 vb.net 在 raiseevent 然后无法通过对象找到事件时给出错误。
  • 你不能从内部类中引发外部类的事件
  • 但是,通过实例提升。
  • @paritosh:C# 代码是有效的——奇怪的是 VB 不允许这样做。

标签: c# .net vb.net oop events


【解决方案1】:

奇怪的是VB不允许直接这样做,但是你可以通过在你的外部类中添加一个方法来引发事件:

Public Class Class1
    Inherits ComboBox

    Public Event ItemCheck As ItemCheckEventHandler

    Public Sub RaiseItemCheckEvent(ByVal sender As Object, ByVal e As ItemCheckEventArgs)
        RaiseEvent ItemCheck(sender, e)
    End Sub

    Public Class f
        Private c As Class1

        Public Sub New(ByVal c1 As Class1)
            c = c1
            AddHandler c.ItemCheck, AddressOf c_ItemCheck
        End Sub

        Private Sub c_ItemCheck(ByVal sender As Object, ByVal e As ItemCheckEventArgs)
            c.RaiseItemCheckEvent(sender, e)
        End Sub

    End Class

End Class

【讨论】:

  • 嗯。感谢您提供这种替代方式。它能够实现所需的东西。
  • 这就是为什么框架指南建议使用OnEvent 函数来引发事件。
【解决方案2】:

你需要在类中声明事件

Public Class f
    Public Event ItemCheck As EventHandler

    Private c As Class1

    Public Sub New(c1 As Class1)
        c = c1
        AddHandler c.ItemCheck, AddressOf c_ItemCheck
    End Sub

    Private Sub c_ItemCheck(sender As Object, e As ItemCheckEventArgs)
        RaiseEvent ItemCheck(sender, e)
    End Sub



End Class

【讨论】:

  • 得到同样的错误。我需要父类中的事件和子类中的访问。和 C# 的东西一样。
猜你喜欢
  • 2011-05-07
  • 1970-01-01
  • 2017-05-20
  • 2011-12-05
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
相关资源
最近更新 更多