質問: どなたか下記の症状について解決策をお持ちであれば教えていただけないでしょうか? 一見エラーも出ないのに理由が分からなくて困っています。 VBで作成された装置1を制御するフォーム1のプロジェクト1、装置2を制御するフォーム2のプロジェクト2があります。連動して装置2を制御させるためにフォーム2をプロジェクト1に追加して、フォーム1からフォーム2を開くように制御させ、フォーム2から装置2を制御しつつ、フォーム1のパラメータを書き換えて装置1を制御させたいです。 下記の様にプロジェクトのフォームを取り込んでます。ソースはVisual Studio 2019で作成しています。 【変更前】 プロジェクト1 ┗フォーム1(装置1) プロジェクト2 ┗ フォーム2(装置2) 【変更後】 プロジェクト1’ ┣ フォーム1(装置1) ┗ フォーム2(装置2) ※クラスはそれぞれ装置1と2で別々に記述しています。 【やりたいこと概要】 フォーム1からフォーム2をオープン フォーム2をオープンした後にフォーム1のパラメータを変更してフォーム1内のボタンをクリックイベントで装置1を制御 【困ったこと】 フォーム2はオープンでき、装置2を制御できますが、フォーム2と連動してフォーム1のパラメータを変えることができません。 0から作った簡素なフォームでは上記の様なサンプルでは意図通りにできたのですが、元々あるコンパイル済みのプロジェクト1(複雑)からコンパイル済みのプロジェクトのフォーム2(まあまあ複雑)を追加したプロジェクト1’は意図通りにできません。フォームを追加した後はコンパイルしてもエラーは生じていません。 どういう訳でそのようなことになるのかが分からなくて対処に困っています。 どこかにそういう制御をするキーがあって、falseとかになっているのかも知れませんがいくら調べても分かりません。 「フォーム間のデータの受け渡し」については、ネット検索で同様なコードを組んで確認もしていますが、目的の様には動作しません。 どうかよろしくお願いします。
回答: こんにちは。 このフォーム、二つを「同時」に開いて、操作できるでしょうか。 かなり疑問。 制御する、そのためには、ケーブルがあって、ポートがあって、ポートを制御しながら、通信を行い、動作確認をしながら、出力データを整理して、と、 細かな動作を行っています。 「単体」で開発しているときには、「同時に二つを制御」の問題は、 発生しないんですよ。単体なんだから。 つまり、フォーム1はフォーム2を前提にしてない。 今は、変数を操作されて、起動ぐらいはできているかもしれませんが、フォーム2を起動した時点で、 フォーム1のイニシャライズ処理は、吹き飛んでいる可能性が心配。 まず、フォーム1の起動時に、装置1に対して、動作命令を出しているなら、 その環境で装置2を動かしたとき、誤作動しないか、確認。 もし、ダメそうなら、全部作り直しするほうが、早いかもしれない。 1) 開いたときに動作の初期化をさせる部分を、誤作動なく処理させる。 2) 制御の切り替えの頻度にあわせて、画面と動作を決める。 ひとつの動作のときに、別のも、操作したいのと、 「ひとつの動作が終わったら、次の装置」でいいのとでは、まったく処理構造が違います 現在の問題がどこにあるのか、見つけないと、対策ができないですよ