2012-03-30 10 views
0

以下のコードを使用して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でイベントを発生させる必要がありますが、イベントは受信されません。

フォームが使用されると、なぜ機能しないのですか?あらゆるサポートに感謝します。

+1

これはかなり明白です。 clsConVB6ではイベントを公開しましたが、Form1ではイベントを公開しませんでした。あなたのVB6コードは、目に見えないクラスのイベントを購読することはできません。 –

答えて

0

上記の提案は解決策ではありませんでした。 Form1のイベントはVB 6ではなく、C#-class clsConVB6でイベントを発生させるべきではないので、私は誤解していたと思います。そしてそこには、必要な出来事が起こるはずです。

しかし、私はexeファイルを作成してこの問題を解決しました。イベントは機能しましたが、作成されたEXE-FILEだけでした。実行時に、私はVisual Basicでイベントを受け取りませんが、イベントは正常にexeファイルで動作しています。

+0

修正のおめでとう!あなたができるときは、他の人があなたの成功から学ぶことができるように、あなたの答えを「受け入れられた」とマークしてください。乾杯〜 –

関連する問題