以下のコードを使用してVB6でイベントを発生させたいと思います。C#/ VB6フォームとの相互作用
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();
}
}
をForm1のコード:私のVB6クラスで
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();
}
私は、最初のイベントを受け取りますが、私は、フォーム上のボタンのクリックによって作成された秒1を受信しません。 Form1のイベントは、clsConVB6クラスにイベントを送信します。私はいつも "イベントmsgbox"を取得するので、うまく動作します。最後に、clsConVB6はVB6でイベントを発生させる必要がありますが、イベントは受信されません。
フォームが使用されると、なぜ機能しないのですか?あらゆるサポートに感謝します。
これはかなり明白です。 clsConVB6ではイベントを公開しましたが、Form1ではイベントを公開しませんでした。あなたのVB6コードは、目に見えないクラスのイベントを購読することはできません。 –