如何在vb6中监听C#.NET activeX控件的事件

时间:2013-10-02 13:52:37

标签: c# .net vb6 activex com-interop

.net控件已被引用并添加到vb6项目中。它还显示了我在界面中的事件。但是,vb6没有注册到事件,我不知道为什么。我已经阅读了几十篇关于这个主题的文章,使用了一个有效的.Net Control / vb6代码。这是我第一次使用Events进行循环赛,所以它可能是我想念的非常小的东西,但这里是代码:

C#的.NET

[ComVisible (true)]
[Guid(CustomerCreditControl.EventsId)]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ICustomerCreditControlEvents
{
    [DispId(1)]
    void Test();
}

[ComVisible(true)]
[Guid(CustomerCreditControl.InterfaceId)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ICustomerCreditControl
{
    void SetAccount(string customerNumber, int generatorId);
    string CreditHold { get; }
}

[ComVisible(true)]
[Guid(CustomerCreditControl.ClassId)]
[ClassInterface(ClassInterfaceType.None)]
[ComSourceInterfaces(typeof(ICustomerCreditControlEvents))]
public partial class CustomerCreditControl : UserControl, ICustomerCreditControl
{
     public delegate void TestEventHandler();
     public event TestEventHandler TestEvent;
    [ComRegisterFunction()]
    private static void Register(Type t)
    {
        ComRegistration.RegisterControl(t, "");
    }

    [ComUnregisterFunction()]
    private static void Unregister(Type t)
    {
        ComRegistration.UnregisterControl(t);
    }
    public CustomerCreditControl()
    {
        InitializeComponent();
    }
    public void SetAccount(string customerNumber, int generatorId)
    {
        _customer = RCI.DataAccess.DataFactory.Current.AccountService.GetCustomer(customerNumber.Trim());           
        SetAccount(_customer, generatorId);
    }
    public void btnNewSalesOrder_Click(object sender, EventArgs e)
    {
        if (TestEvent != null)
        {
            MessageBox.Show("Test Event Fired");
            TestEvent();
        }
        else
            MessageBox.Show("TestEvent = null");

        string[] SOI = {"a","b","c"};
        MessageBox.Show(SOI.ToString());
        OnNewSalesOrder(ref SOI);
    }
 }

VB6

Private Sub customerCreditInfo_Test()
     MsgBox "Test 2"
End Sub

vb6代码识别测试事件,但它不会注册到事件。控件放在vb6表单上。我有'MsgBox'测试2“'作为测试。 tlb由项目引用,activeX被添加到工具箱组件中。我已从Windows取消注册此dll并通过并从注册表中删除所有实例。我正在使用regasm / register / codebase / tlb来注册dll。

使用Visual Studio 2008,.net 2.0并在Windows 7计算机上进行编译。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

尝试更改此行

   public event TestEventHandler TestEvent;

   public event TestEventHandler Test;

这是为了匹配源接口中的事件方法定义。然后以Test()点击事件。