从不同的形式访问对象的实例
Accessing an instance of an object from a different form
我程序的主窗体有一个按钮,可以打开名为 PortOpener 的第二个窗体。 PortOpener 设置为打开串行、GPIB、以太网和 USB 端口以与外部设备通信。您 select 在 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();
}
端口打开,我可以通过端口发送和接收数据。我可以通过 selecting 不同的 COM 端口打开表单的多个实例。我正在努力做到这一点,以便 mainForm 可以将数据传递给要传输的 serialWindow。
我知道如何使用此方法将数据从 serialWindow 传递到 mainForm。
How to access a form control for another form?
我不确定如何区分 serialWindows 的不同实例。如果 mainForm 想要通过 COM 3 传输数据并且打开了 6 个 COM 端口,您将如何处理每个端口?我是否应该尝试将其发送给所有这些人,然后让 serialWindows 检查其打开的 COM 端口是否与我要传输的端口相匹配?
portOpenerForm
serialWindowForm
感谢您的帮助
知道所有打开的表单都存储在 Application.OpenForms 集合中,这就相对简单了。
在您的 SerialWindow 窗体中添加一个 public 属性 名称(例如)字符串类型的 PortName
在 SerialWindow 代码中
public string PortName { get; set; }
现在在方法 OpenCom 中设置这个 属性
public void OpenCom(string port, string parity, string stop, string data, string baud, string PortName)
{
this.PortName = port;
comm.PortName = port;
....
comm.OpenPort();
}
此时您的 mainForm 能够识别查看此 public 属性
的特定 SerialWindow
在 mainForm 中,您遍历 Application.OpenForms 集合,其中保留了您的应用程序打开的所有表单实例,并且仅找到 SerialWindow
类型的表单
foreach(SerialWindow frm in Application.OpenForms.OfType<SerialWindow>())
{
// If this is a SerialWindow, then it has the property PortName
if(frm.PortName == "COM4")
... pass your data to the frm instance
}
这当然可以适用于您想要从 mainForm
检查的任何 属性
我程序的主窗体有一个按钮,可以打开名为 PortOpener 的第二个窗体。 PortOpener 设置为打开串行、GPIB、以太网和 USB 端口以与外部设备通信。您 select 在 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();
}
端口打开,我可以通过端口发送和接收数据。我可以通过 selecting 不同的 COM 端口打开表单的多个实例。我正在努力做到这一点,以便 mainForm 可以将数据传递给要传输的 serialWindow。
我知道如何使用此方法将数据从 serialWindow 传递到 mainForm。
How to access a form control for another form?
我不确定如何区分 serialWindows 的不同实例。如果 mainForm 想要通过 COM 3 传输数据并且打开了 6 个 COM 端口,您将如何处理每个端口?我是否应该尝试将其发送给所有这些人,然后让 serialWindows 检查其打开的 COM 端口是否与我要传输的端口相匹配?
portOpenerForm
serialWindowForm
感谢您的帮助
知道所有打开的表单都存储在 Application.OpenForms 集合中,这就相对简单了。
在您的 SerialWindow 窗体中添加一个 public 属性 名称(例如)字符串类型的 PortName
在 SerialWindow 代码中
public string PortName { get; set; }
现在在方法 OpenCom 中设置这个 属性
public void OpenCom(string port, string parity, string stop, string data, string baud, string PortName)
{
this.PortName = port;
comm.PortName = port;
....
comm.OpenPort();
}
此时您的 mainForm 能够识别查看此 public 属性
的特定 SerialWindow在 mainForm 中,您遍历 Application.OpenForms 集合,其中保留了您的应用程序打开的所有表单实例,并且仅找到 SerialWindow
类型的表单foreach(SerialWindow frm in Application.OpenForms.OfType<SerialWindow>())
{
// If this is a SerialWindow, then it has the property PortName
if(frm.PortName == "COM4")
... pass your data to the frm instance
}
这当然可以适用于您想要从 mainForm
检查的任何 属性