C# 在ax 2009中处理activeX事件

C# 在ax 2009中处理activeX事件,c#,events,activex,axapta,C#,Events,Activex,Axapta,我有一个包含几个事件的activeX组件。在.net中调试此dll证明事件已引发并且可以中断(这是一个单词?;) 通过regasm/codebase注册这个dll是可行的,我可以将这个activeX添加到ax的表单中。这些事件在ax中的activeX资源管理器中列出。 但我似乎没有机会处理ax中引发的事件 使用另一个activeX(例如Microsoft日期和时间选择器控件)可以很好地工作 我感谢任何提示或提示 下面是我要讲的几行代码 namespace <someNamespace>

我有一个包含几个事件的activeX组件。在.net中调试此dll证明事件已引发并且可以中断(这是一个单词?;) 通过regasm/codebase注册这个dll是可行的,我可以将这个activeX添加到ax的表单中。这些事件在ax中的activeX资源管理器中列出。 但我似乎没有机会处理ax中引发的事件

使用另一个activeX(例如Microsoft日期和时间选择器控件)可以很好地工作

我感谢任何提示或提示

下面是我要讲的几行代码

namespace <someNamespace>
{
    [ProgId("<someProgID>")]
    [ClassInterface(ClassInterfaceType.AutoDual), ComSourceInterfaces(typeof( <myInterface> ))]
    [Guid("<someGUID>")]
    [ComVisible(true)]

    public class <ClassName>
    {

        [instantiate some COM-Object, named dummy]

        public 
        <ClassName>( ...)
        {
            init();
        }

        public delegate void <someDelegate>( int a, int b );
        public event someDelegate myDelegate;

        [ComVisible(true)]
        public void OnEvent( int a, int b )
        {
            if ( myDelegate != null )
            {
                Console.WriteLine( "yippie" );
            }
        }

        [ComVisible(true)]
        public void run( ... )
        {
            this.myDelegate += new someDelegate( this.OnEvent );
        }

        private void
        onEvent( int a, int b )
        {
             myDelegate( a, b );
        }

        #endregion
    }
}

[Guid("<someOtherGUID>")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface <myInterface>
{
    [DispId(1)]
    void myDelegate( int a, int b );
}
}
名称空间
{
[项目ID(“”)
[ClassInterface(ClassInterfaceType.AutoDual),ComSourceInterfaces(typeof())]
[Guid(“”)
[ComVisible(true)]
公共课
{
[实例化某个名为dummy的COM对象]
平民的
( ...)
{
init();
}
公共代表无效(内部a、内部b);
公共事件代理myDelegate;
[ComVisible(true)]
公共无效OneEvent(内部a、内部b)
{
如果(myDelegate!=null)
{
Console.WriteLine(“yippie”);
}
}
[ComVisible(true)]
公开作废运行(…)
{
this.myDelegate+=新的someDelegate(this.OnEvent);
}
私人空间
OneEvent(内部a、内部b)
{
我的代表(a、b);
}
#端区
}
}
[Guid(“”)
[接口类型(ComInterfaceType.InterfaceIsIDispatch)]
公共接口
{
[附表(1)]
无效myDelegate(内部a、内部b);
}
}
这些是与事件相关的基本功能(希望我没有忘记其中一个)。 activeX本身是com对象的包装器,而com对象本身无法集成到ax、afaik中。 “OneEvent”是由com对象的事件调用的函数,并激发“myDelegate”。所有这些都可以正常工作,在visual studio中进行测试-事件可以在窗体上处理,调用activeX部件。 最后一步是在ax中处理此事件。
正如我已经写过的,activeX explorer中正确列出了事件本身,但我在x++中没有找到对此事件做出反应的方法。

我假设您的activeX也是用.NET编写的

在.NET中编写ActiveX控件时,有几个有趣的地方。其中之一是需要为ActiveX控件公开的事件提供单独的接口。当满足任何条件时,您还需要在控件中手动引发事件


我回答了一个类似的问题。也许可以查看我在那里发布的ActiveX结构。

不幸的是,您的解释不起作用-因为我认为注释的600个字符不足以写下一些代码示例,我将通过下面的答案来完成@Nico编辑你的问题并放在那里。@Nico,很抱歉我最初误读了你的问题。我从未使用过x++或axapta。我以为你在和WinForms做斗争,但你似乎已经把那部分整理好了。对不起,我帮不上什么忙。。。。