掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ACTIVEX.EXEで独自イベントを発生させ、標準EXEでイベント処理するには? (ID:124533)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
一応、VB6という前提で回答しますね。 ----------------- (1) 標準EXE側の問題点。 > Public WithEvents Test As Prj.ClassTest > Private Sub EvTest(Msg As String) ではなく、 Public WithEvents Test As Prj.ClassTest Private Sub Test_EvTest(Msg As String) ですよね? 今回のようにWithEvents宣言した場合、コードウィンドウの左上にある ドロップダウンリスト(オブジェクト ボックス)に、『Test』という項目が 表示されるはずなので、それを選択後、コードウィンドウの右上にある ドロップダウンリスト(プロシージャ ボックス)から、『EvTest』を 選択することで、「Sub Test_EvTest」が自動生成されるはずです。 ----------------- (2) ActiveX EXE側の問題点。 > Private Sub Class_Initialize() > Load Form1 > End Sub Form1 を Loadしてはいますが、Showしている部分がありませんよ。 このままでは、ActiveX EXEのフォームが非表示となってしまいます。 > Private Sub Button1_Click() ん……。VB6標準の Command1_Click という名前ではなく、VB.NETのように Button1_Click という名前にしたのですね? で、これはボタンのClickイベントだと思いますが、だとすると尚更、 Form1が表示されていなければなりませんよね。ボタンを押す事ができなければ、 いつまでも EvTestONイベントが発生しない事になってしまいますから。 > 'Form1の記述 > Public WithEvents Test As ClassTest '通信クラス定義 > Private Sub Form_Load() > Set Test = New ClassTest > End Sub 上記で作成している 『Set Test = New ClassTest』 と、標準EXE側で作成している 『Set Test = New Prj.ClassTest』 とが、別のインスタンスである事は理解されていますでしょうか? まず、クラスの設計を整理してみましょう。 今回の場合、通信クラスのインスタンスを共有せねばならないので、 案1. 標準EXE側でClassTestを生成し、それをActiveX EXE側でも使う。 案2. ActiveX EXE側でClassTestを生成し、それを標準EXE側でも使う。 のいずれかの設計にする必要があるかと思います。 この場合のActiveX側の実装としては……。 たとえば前者の場合は、外部で生成されたインスタンスをForm1が使えるよう、 ClassTestを受け渡す為のメソッドを用意する、という手法があります。 後者の場合は、ClassTestが外部で誤って生成される事がないよう、クラスの Instancingプロパティを、作成不可にしておいた方が良いでしょう。その上で、 クラスのインスタンスを標準EXEに返すためのメソッドかプロパティを用意します。 ActiveX EXEからのイベント通知について、具体的な例が欲しい場合には、 VB6ヘルプの下記項目を参照してください。 [Visual Studio 6.0 ドキュメント] └[Visual Basic ドキュメント] └[Visual Basic の使用方法] └[コンポーネント ツール ガイド] └[ActiveX コンポーネントの作成方法] └[ActiveX EXE コンポーネントの作成方法]
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.