【发布时间】:2016-09-03 14:43:51
【问题描述】:
我的程序的主窗体有一个按钮,可以打开名为 PortOpener 的第二个窗体。 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 实例。如果 mainForm 想要通过 COM 传输数据 3 并且打开了 6 个 COM 端口,您将如何处理每个端口?我是否应该尝试将其发送给他们所有人,然后让 serialWindows 检查其打开的 COM 端口是否与我要传输的端口匹配?
感谢您的帮助
【问题讨论】:
-
即使只考虑表单可能不是最好的方法,我也会在 mainForms 类中创建一个 Dictionary,它会跟踪所有打开的端口和相应的 serialWindow 实例。使用 COM3 或 USB1 等键可以让您区分连接。连接时添加引用,断开连接时删除它们。
-
您可以采用多种方法。有关几个不同的选项,请参阅标记的副本。如果您仍然无法解决此问题,请发布一个新问题,其中包含一个很好的 minimal reproducible example,它清楚地显示了您尝试过的内容,以及对代码现在做什么以及您想要什么的精确而详细的解释它要做什么,以及您在实现该目标时遇到了什么具体问题。
-
Peter Duniho,不确定您是否在拖钓。如果您阅读了整个问题,您会发现我知道如何在 2 个表单之间传递数据,并提供了一个示例链接,您声称我的问题是重复的。我需要帮助的是在打开该表单的多个版本时与正确的表单交谈。 Steve 通过 Application.OpenForm.OfType 帮助解决了这个问题。
标签: c# forms serial-port