- PR -

Dll化したFormの2重起動をチェックするには?

投稿者投稿内容
gorisaku
ベテラン
会議室デビュー日: 2004/04/17
投稿数: 95
投稿日時: 2004-08-03 15:03
Jitta殿 ありがとうございます。

引用:

Jittaさんの書き込み (2004-08-03 13:34) より:
とりあえず、
http://quick-tips.hp.infoseek.co.jp/vs.net/sample/index.html
ここから
サンプル1のソリューションをダウンロード
してみてください。で、コンパイルして、実行してください。

 「複数表示」と、「単数表示」というボタンがあり、どちらのボタンも同じフォームが起動します。「複数表示」は、ボタンをクリックするごとに、フォームが表示されます。「単数表示」は、1つのフォームしか表示されず、2度目以降はそのフォームが最前面に出ます。

 こういう動作でよろしいでしょうか?良かったら、動作を理解し、メンテができると思ったらまねてください。質問は受け付けますが、メンテができることが条件です。



DLしてみました。
この状態です。(^ ^)
この状態をDllで実現できるようにしたいというのが理想です。
まずはこのサンプルソースをいろいろ検証し、
試してみようと思います。
また質問させていただくことがあると思いますが、
よろしくお願いいたします。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-08-03 15:07
引用:

gorisakuさんの書き込み (2004-08-03 13:39) より:
上記の回答ですが、フォームのインスタンスを作成しております。
DLLなのでEXEをキックする形ではありません。


おお、そういう話ですね、勘違いしておりました。
DLL化したと言う場合、単に1EXEをDLLに分けたという意味にも取れるので、そちらと思ってしまいました。
※個人的には単に起動と言った場合、プロセスを起動するイメージが強いです。
引用:

1.引数(インスタンスへ渡す)を設定
 <0:検索起動 1:単体起動>
2.引数を判断し、2重起動を行う
 <dll側で2重起動を判断>


呼び出されるフォーム側で制御を行うのであれば、表示されたときにチェックを行うのではなく、インスタンス作成時にチェックした方が良いように思います。
※シングルトンとか、やりようはいくらでも。

もしくは、呼び出す側でモーダルに表示するのでも良いような気がしますが。
※ただし、単数しか起動できないアプリでは、ウィンドウが触れなくても良い場合という条件付きです。
引用:

ちなみにForm_Load時にチェックをして
2重起動ならApplication.Exit()をしています。
それも良いのやら・・・


これはまずいでしょう。
メニュー(起動する側)のアプリごと消えてよいのであればできないこともないですが。
※どちらにしてもApplication.Exit()はあまり使うべきではないような気はします。

あとは、複数のアプリが起動されてる場合に、一つのアプリケーションが思い処理を行っている間、他のアプリケーションが応答無しになってよいかとか、一つのアプリケーションで問題が発生した場合に、全てのアプリケーションを巻き込んでよいかとか、気をつける点はいくつもあると思います。

モーダルで単体のアプリケーション起動ならそれほど問題点はないんですが。
gorisaku
ベテラン
会議室デビュー日: 2004/04/17
投稿数: 95
投稿日時: 2004-08-03 15:26
Jitta殿 ありがとうございます。

引用:

Jittaさんの書き込み (2004-08-03 13:34) より:
とりあえず、
http://quick-tips.hp.infoseek.co.jp/vs.net/sample/index.html
ここから
サンプル1のソリューションをダウンロード
してみてください。で、コンパイルして、実行してください。

 「複数表示」と、「単数表示」というボタンがあり、どちらのボタンも同じフォームが起動します。「複数表示」は、ボタンをクリックするごとに、フォームが表示されます。「単数表示」は、1つのフォームしか表示されず、2度目以降はそのフォームが最前面に出ます。

 こういう動作でよろしいでしょうか?良かったら、動作を理解し、メンテができると思ったらまねてください。質問は受け付けますが、メンテができることが条件です。



DLしてみました。
この状態です。(^ ^)
この状態をDllで実現できるようにしたいというのが理想です。
まずはこのサンプルソースをいろいろ検証し、
試してみようと思います。
また質問させていただくことがあると思いますが、
よろしくお願いいたします。
gorisaku
ベテラン
会議室デビュー日: 2004/04/17
投稿数: 95
投稿日時: 2004-08-03 15:39
引用:

Jittaさんの書き込み (2004-08-03 13:34) より:
とりあえず、
http://quick-tips.hp.infoseek.co.jp/vs.net/sample/index.html
ここから
サンプル1のソリューションをダウンロード
してみてください。で、コンパイルして、実行してください。

 「複数表示」と、「単数表示」というボタンがあり、どちらのボタンも同じフォームが起動します。「複数表示」は、ボタンをクリックするごとに、フォームが表示されます。「単数表示」は、1つのフォームしか表示されず、2度目以降はそのフォームが最前面に出ます。

 こういう動作でよろしいでしょうか?良かったら、動作を理解し、メンテができると思ったらまねてください。質問は受け付けますが、メンテができることが条件です。



DLしてみました。
この状態です。(^ ^)
この状態をDllで実現できるようにしたいというのが理想です。
まずはこのサンプルソースをいろいろ検証し、
試してみようと思います。
また質問させていただくことがあると思いますが、
よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-03 16:18
 なんか、@ITのサーバって、急に重くなりますよね。リクエストが通れば、表示するときにエラーになってもデータは登録されています。時間がかかるからといって「送信」ボタンを何度も押したり、エラーになったからといって「戻る」して「送信」したりせず、一度スレッド一覧を見て、投稿されているかどうか確認しましょう。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-03 16:34
引用:

gorisakuさんの書き込み (2004-08-03 15:39) より:

この状態をDllで実現できるようにしたいというのが理想です。


 うみ?私の方の「ひらがなカタカナ全角半角変換フォーム」は、DLL化していますよね。これがgorisakuさんの「各マスタの検索画面」となるわけです。

 まず、プログラムメニューからの起動ですが、ここは「単数表示」ボタンのようなことをします。プログラムメニューフォームが、「各マスタの検索画面」のインスタンスを格納する変数を持ち、それがNULLかどうかによって、新規インスタンスを作成するかどうかを決めます。インスタンスを作成した際、closedイベントハンドラを登録し、インスタンス格納変数をnullクリアすることを忘れてはいけません。

 次にメニュー以外のプログラムから起動した場合ですが、この場合は「メニュー以外のプログラム」は特定のインスタンス格納変数を持ちません。Showで開いたFormは、CloseするとDisposeするので、開きっぱなしでかまいません。


 あ、発想というか、着眼点の転換が必要です。「dll化したフォーム」が「1つだけ/複数」を制御するのではなく、「呼び出すフォーム」が制御します。
gorisaku
ベテラン
会議室デビュー日: 2004/04/17
投稿数: 95
投稿日時: 2004-08-03 17:29
引用:

Jittaさんの書き込み (2004-08-03 16:34) より:
うみ?私の方の「ひらがなカタカナ全角半角変換フォーム」は、DLL化していますよね。これがgorisakuさんの「各マスタの検索画面」となるわけです。

 まず、プログラムメニューからの起動ですが、ここは「単数表示」ボタンのようなことをします。プログラムメニューフォームが、「各マスタの検索画面」のインスタンスを格納する変数を持ち、それがNULLかどうかによって、新規インスタンスを作成するかどうかを決めます。インスタンスを作成した際、closedイベントハンドラを登録し、インスタンス格納変数をnullクリアすることを忘れてはいけません。

 次にメニュー以外のプログラムから起動した場合ですが、この場合は「メニュー以外のプログラム」は特定のインスタンス格納変数を持ちません。Showで開いたFormは、CloseするとDisposeするので、開きっぱなしでかまいません。


 あ、発想というか、着眼点の転換が必要です。「dll化したフォーム」が「1つだけ/複数」を制御するのではなく、「呼び出すフォーム」が制御します。



投稿が・・・(すいません・・・
まさにこのコード対応できました。(笑
この掲示板で幾度となく助けられました。多謝!!
私もほかの方が助けられるようにこれからも勉強していきたいと思います。
Jitta殿、諸農殿、IZUMI Yusuke殿、なちゃ殿
ありがとうございます。

スキルアップ/キャリアアップ(JOB@IT)