C# 在ax 2009中处理activeX事件
我有一个包含几个事件的activeX组件。在.net中调试此dll证明事件已引发并且可以中断(这是一个单词?;) 通过regasm/codebase注册这个dll是可行的,我可以将这个activeX添加到ax的表单中。这些事件在ax中的activeX资源管理器中列出。 但我似乎没有机会处理ax中引发的事件 使用另一个activeX(例如Microsoft日期和时间选择器控件)可以很好地工作 我感谢任何提示或提示 下面是我要讲的几行代码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>
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做斗争,但你似乎已经把那部分整理好了。对不起,我帮不上什么忙。。。。