0

私はこのクラスを持っています。デリゲートをフェローとして関数として定義します

<br />

using System;<br />
using System.Collections.Generic;<br />
using System.Linq;<br />
using System.Text;<br />
using System.ComponentModel;<br />
using System.Collections;<br /><br />
namespace ClassLibrary1<br />
{<br />
    public delegate bool DrillDownHandler(IComponent control);<br />
    public delegate void ComponentLoadedHandler(IComponent control);

        public interface interface1
    {
        event DrillDownHandler DrillDown;
        event ComponentLoadedHandler ComponentLoaded;
    }


    public class Class1 : interface1
    {
        public Class1()
        {
            DrillDown += new DrillDownHandler(DrillDownDefault);
        }

        private ArrayList drillList = new ArrayList();
        public event DrillDownHandler DrillDown
        {
            add
            {
                drillList.Add(value);
            }
            remove
            {
                drillList.Remove(value);
            }
        }
        public event ComponentLoadedHandler ComponentLoaded;

        private bool DrillDownDefault(IComponent control)
        {
            return false;
        }
    }
}

VB.Net に変換すると、次のコードが取得されますが、機能しません

<br /><br />
Imports System<br />
Imports System.Collections.Generic<br />
Imports System.Linq<br />
Imports System.Text<br />
Imports System.ComponentModel<br />
Imports System.Collections<br />
<br />
Namespace ClassLibrary1<br />
    Public Delegate Function DrillDownHandler(control As IComponent) As Boolean<br />
    Public Delegate Sub ComponentLoadedHandler(control As IComponent)<br />


    Public Interface interface1
        Event DrillDown As DrillDownHandler
        Event ComponentLoaded As ComponentLoadedHandler
    End Interface


    Public Class Class1
        Inherits interface1
        Public Sub New()
            DrillDown += New DrillDownHandler(DrillDownDefault)
        End Sub

        Private drillList As New ArrayList()
        Public Custom Event DrillDown As DrillDownHandler
            AddHandler(ByVal value As DrillDownHandler)
                drillList.Add(value)
            End AddHandler
            RemoveHandler(ByVal value As DrillDownHandler)
                drillList.Remove(value)
            End RemoveHandler
        End Event
        Public Event ComponentLoaded As ComponentLoadedHandler

        Private Function DrillDownDefault(control As IComponent) As Boolean
            Return False
        End Function
    End Class
End Namespace

誰でも助けることができます

4

1 に答える 1

1

VB.Net では、戻り値の型を持つデリゲートでイベントを宣言することはできません。サブ「デリゲート」を持つイベントのみが可能です。代わりに、'ByRef' パラメーターを指定した 'Sub' デリゲートを使用してください。

Public Delegate Sub DrillDownHandler(control As IComponent, ByRef bReturnVal As Boolean)

詳細については、http://social.msdn.microsoft.com/Forums/en/vblanguage/thread/f1141545-6ef5-49df-8c16-ad27ee41a3bcをご覧ください。

それがうまくいくことを願っています。

于 2012-09-08T06:34:58.000 に答える