.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计算机上进行编译。
我错过了什么?
答案 0 :(得分:2)
尝试更改此行
public event TestEventHandler TestEvent;
到
public event TestEventHandler Test;
这是为了匹配源接口中的事件方法定义。然后以Test()
点击事件。