こんにちは、私はFormを切り替えてもネットワーク接続しているプログラムを作りたいのですがわからないので教えてください。
現在は、Form1を開くとに接続して、Form2切り替える際に接続を切り。Formが開けばまた新しく接続をする。というON、OFFの繰り返しをしているので、ためにエラーがでたりしてしまいます。
Formを切り替えてもプログラムを実行した時から閉じるまで常時接続されている状態にする方法を教えてください。お願いします。
最初からForm2が持ってる接続をForm1が開くとか?
Form2からもForm1からも見れる別の場所に接続を
置いておくとか?
Form1もForm2も関係なくプログラム起動時に接続を
開いてプログラム終了時に閉じるとか?
特攻隊長まるるうさん返事ありがとうございます。
>>①Form2からもForm1からも見れる別の場所に接続を置いておくとか?
>>②Form1もForm2も関係なくプログラム起動時に接続を開いてプログラム終了時に閉じるとか?
①のことは僕も考えたんですけど、どうするばいいのかがわかりません。
今はForm1のコードにClass1からネットワークを接続処理をするようにして
Form2はClass2からネットワーク接続を行うようにしています。
②の考え方は関係なくプログラム起動時に接続をするためのはどこにプログラムを入力すればいいのでしょうか?
Form3を追加して接続し非表示にしておくとか。
編集 削除abuさんありがとうございます。
その提案は、Form3で接続されていてもそれがForm1、Form2で通信できるかが問題になりそうですけど、思いもつかなかった事で興味深いのでやってみます。
ありがとうございます。
また他に何かあったら教えてください。
やってみたらまた報告します。
Form3を使った接続やってみました。
いろいろなエラーを乗り越えて
メッセージを送ることは送れたのですが、Formを切り替えると
なぜかメッセージが倍になってさらに切り替えるとさらに倍になってくる
ようになっています。
それと、受信したメッセージをForm1に受信した時点でForm1のTextBoxに出力したいのですが
Form1をForm2に切り替えて、またForm1に戻ると表示されるようになっている
とりあえず、今パッとやってみた中間報告です。
また詳しく調べて悪い点を直してみます。
他の提案も待ってます。おねがいします
3つ提案したけどさらりと2つになってるねw
まぁ、
>その提案は、Form3で接続されていてもそれがForm1、Form2で
>通信できるかが問題になりそうですけど、
とか言っちゃってる辺りを見ると、Form2の何かをForm1で使う
事も考えられないんでしょうけどw。
>今はForm1のコードにClass1からネットワークを接続処理をするようにして
>Form2はClass2からネットワーク接続を行うようにしています。
Class1 をForm1からForm2に引き渡せば良いだけじゃないのかなぁ?
プロパティでもメソッドでも作って…。
abu さんの提案もボクの提案も
>Class1からネットワークを接続処理をするようにして
が実現できてる時点で、まず間違いなく、できる事だと思いますよ。
何が分かってるのか?どの程度の実力なのかがよく分かりませんし、
ヒロさんの説明では具体的なコードが全然想像つきません。下手な
説明よりサンプルコード載せてくれた方が早そうだけどね。
ただし、実際のコードが多い場合、サンプルコードは書き込み用に
必要な部分だけ分かり易く編集したものを作って下さい。通信が
成功してるなら通信に関しては詳細なコード必要ないかもしれないし。
下手なコードをだらだら書かれても解析する暇はありませんので。
>(1)のことは僕も考えたんですけど、どうするばいいのかがわかりません。
WEB上で丸付き数字など機種依存文字は使わないで下さい。
…日本語ももうちょっと…逆の立場で、ボクが誤字脱字の説明したら
ヒロさんはどんな気持ちになりますか?
…モジュールレベルのグローバルな変数を使えば?クラスをグローバル
な変数に New してもいいし。
>(2)の考え方は関係なくプログラム起動時に接続をするためのは
>どこにプログラムを入力すればいいのでしょうか?
フォーム起動でなく Sub Main 起動のプログラムにするとか…。
…ってゆーかどこ?とか言われてもプログラムの起動と終了を
決めるのはプログラマなんだからどこでもいいハズなんですが?(^^;)
そもそも『私はFormを切り替えて』と書かれていますが、これは
1、FormAにあるフォーカスをFormBに移す。
2、FormAにあるフォーカスをFormBし、FormAを最小化する。
3、FormAにあるフォーカスをFormBに移し、FormAをUnloadする。
4、FormAにあるフォーカスをFormBに移し、FormAを不可視にする。
この4通りが考えられる。
質問者が取られている方法は第3の方法であるが、この場合は不適当。
FormAにUnloadイベントが発生した場合、FormAのUnloadイベントの中で、
FormAのモジュールがネットワークに接続中か否かの判断をして、
接続中の場合はワーニングを出して、ユーザーに『接続切断』又は『接続続行』の
選択をさせ、『接続続行』選択の場合は第2又は第4の処理を行い
『接続切断』選択の場合は明示的に接続を切断して第3の方法を取る。