私のプログラムのメインフォームには、PortOpenerという2番目のフォームを開くボタンがあります。 PortOpenerは、シリアル、GPIB、イーサネット、およびUSBポートを開いて外部機器と通信するように設定されています。 PortOpenerでポートを開くために必要なすべてのデータを選択し、ポートを開くボタンをクリックします。これにより、すべてのポート情報がserialWindowという新しいフォームに渡され、次にserialWindowがポートを開きます。異なるフォームからオブジェクトのインスタンスへのアクセス
serialWindowが作成され、データが新しいフォームにどのように渡されるかがここにあります。
private void OpenPortButton_Click(object sender, EventArgs e)
{
SerialWindow _serialWindow = new SerialWindow();
_serialWindow.Show();
_serialWindow.OpenCom(cboPort.SelectedItem.ToString(), cboParity.SelectedItem.ToString(), cboStop.SelectedItem.ToString(), cboData.SelectedItem.ToString(), cboBaud.SelectedItem.ToString(), NamePortTextBox.Text);
}
ここに、ポートに接続する新しいserialWindowがあります。
public void OpenCom(string port, string parity, string stop, string data, string baud, string PortName)
{
comm.PortName = port;
comm.Parity = parity;
comm.StopBits = stop;
comm.DataBits = data;
comm.BaudRate = baud;
comm.DisplayWindow = rxRichTextBox;
comm.OpenPort();
}
ポートが開き、ポートを介してデータを送受信できます。別のCOMポートを選択して、フォームの複数のインスタンスを開くことができます。私はmainFormがserialWindowにデータを渡して送信できるようにしようとしています。
このメソッドを使用してserialWindowからmainFormにデータを渡す方法を知っています。
How to access a form control for another form?
serialWindowsの異なるインスタンスを区別する方法がわかりません。メインフォームがCOM 3を介してデータを送信したい場合、6つのCOMポートがオープンされていれば、それぞれどのように対処しますか?私はそれをすべてに送信して、開いているCOMポートが送信したいCOMポートと一致するかどうかをserialWindowsに確認させるべきですか?助けのための
おかげ
フォームで考えるのが最善の方法ではないかもしれませんが、私は、開いているすべてのポートとそれに対応するserialWindowインスタンスを追跡しているmainFormsクラスのDictionaryを作成します。 COM3やUSB1などのキーを使用すると、接続を区別できます。接続時に参照を追加し、切断時に参照を削除します。 – Yosh
あなたが取ることができる多くのアプローチがあります。いくつかの異なるオプションについては、重複したマークを参照してください。それでも解決できない場合は、あなたが試したことを明確に示す良い[mcve]を含む新しい質問を投稿し、コードが現在何をしているのかについての詳細な詳細な説明、必要なものその代わりに、そしてあなたがその目標を達成している_特有の問題は何か。 –
Peter Duniho、あなたがトローリングをしているかどうかわからない全体の質問を読むと、私は2つのフォームの間でデータを渡す方法を知っていることがわかりますし、私の質問が重複していると主張している例のリンクを提供しています。私が欲しかったのは、そのフォームの複数のバージョンが開かれたときに正しいフォームに話すことでした。 SteveはApplication.OpenForm.OfTypeを使って答えを解決するのを手助けしました。 – Laggmaster