1

私は ac# クラスを vb net に変換しましたが、これらがデリゲート宣言であることを確認できないイベントがいくつかあります。

    Public Delegate Sub IndentChangedEventHandler(NewValue As Integer)
    Public Delegate Sub MultiIndentChangedEventHandler(LeftIndent As Integer, HangIndent As Integer)
    Public Delegate Sub MarginChangedEventHandler(NewValue As Integer)
    Public Delegate Sub TabChangedEventHandler(args As TabEventArgs)

    Public Event LeftHangingIndentChanging As IndentChangedEventHandler
    Public Event LeftIndentChanging As IndentChangedEventHandler
    Public Event RightIndentChanging As IndentChangedEventHandler
    Public Event BothLeftIndentsChanged As MultiIndentChangedEventHandler

    Public Event LeftMarginChanging As MarginChangedEventHandler
    Public Event RightMarginChanging As MarginChangedEventHandler

    Public Event TabAdded As TabChangedEventHandler
    Public Event TabRemoved As TabChangedEventHandler
    Public Event TabChanged As TabChangedEventHandler

'これは vb net で変換された関数です

Private Sub AddTab(pos As Single)
            Dim rect As New RectangleF(pos, 10.0F, 8.0F, 8.0F)
            tabs.Add(rect)
            If TabAdded IsNot Nothing Then
                TabAdded.Invoke(CreateTabArgs(pos))
            End If
        End Sub

C#の文は

if (TabAdded != null)
                TabAdded.Invoke(CreateTabArgs(pos));

デリゲートを呼び出す正しい方法は何ですか?

4

2 に答える 2

0
if (TabAdded != null)
            TabAdded.Invoke(CreateTabArgs(pos));

イベントには、vb.netに3つのアクセサーがあります。追加、削除、および発生です。C#はraiseアクセサーをサポートしていないため、nullを明示的にテストする必要があります。これはvb.netでは必要ありません。許可されていません。何もテストせずに、RaiseEventステートメントを直接使用してください。

Private Sub AddTab(ByVal pos As Single)
    Dim rect As New RectangleF(pos, 10.0F, 8.0F, 8.0F)
    tabs.Add(rect)
    RaiseEvent TabAdded(CreateTabArgs(pos))
End Sub
于 2012-11-23T11:29:01.590 に答える
0

を使うべきだと思いますAddress Of。メソッドからデリゲートへの変換は、C# では暗黙的に行われます。VB.Net では明示的に を使用しますAddress Of。コンバーターはこのことを忘れています。

詳細については、こちらをお読みください

C# から VB.NET に変換されたコードの奇妙なエラー

VB.NET のメソッド グループ?

于 2012-11-23T08:04:42.440 に答える