Ich möchte ein Ereignis in VB6 mit dem folgenden Code auslösen.C#/VB6 Interop mit Formen
public delegate void EventHandler();
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ISOMEINTERFACE
{
[DispId(1)]
void MyEvent();
}
[ClassInterface(ClassInterfaceType.AutoDual),
ComSourceInterfaces(typeof(ISOMEINTERFACE)),
ComVisible(true)]
public class clsConVB6
{
public event EventHandler MyEvent;
public void DoSomething()
{
// both events are, the one from this class and the one from Form1, reach this void
MessageBox.Show("Event");
MyEvent(); //does not raise an event when called from an event from Form1
}
public void ComInteropTest()
{
//-> this event is working fine
DoSomething();
Form1 frm = new Form1();
frm.myFormEvent += new Form1.SomeEventHandler(DoSomething);
frm.ShowDialog();
}
}
Code in Form1:
public delegate void SomeEventHandler();
public event SomeEventHandler myFormEvent;
private void button1_Click(object sender, EventArgs e)
{
//raises an event in the c#-class clsConVB6, not in VB6!
myFormEvent();
}
In meinem VB6-Klasse erhalte ich die erste Veranstaltung, aber ich die zweite nicht erhalten, dass durch Klicken auf eine Schaltfläche auf einem Formular erstellt wird. Das Ereignis in Form1 sendet ein Ereignis an die ClsConVB6-Klasse. Das funktioniert gut, weil ich immer die "event-msgbox" bekomme. Schließlich sollte die clsConVB6 ein Ereignis in VB6 auslösen, aber ich erhalte kein Ereignis.
Warum funktioniert es nicht, wenn ein Formular beteiligt ist? Vielen Dank für jede Unterstützung.
Das ist ziemlich offensichtlich. Sie haben ein Ereignis auf clsConVB6, aber nicht auf Form1 angezeigt. Ihr VB6-Code kann keine Ereignisse für unsichtbare Klassen abonnieren. –