C#_串口调试助手-多窗口委托通信

窗口之间通信无非有两个方向,主窗口发送数据到副窗口,副窗口发送数据到主窗口。

代码在最下面,先看一下解决的思路。

首先是简单的主窗口传数据到副窗口。

在副窗口创建一个函数,必须是public修饰的!!!,入口参数可以任意设置。

然后主窗体创建副窗体,直接调用副窗口函数即可实现数据传输。

蓝框就是创建的窗口句柄的,等于已经创建了一个新窗口(我个人是喜欢全局创建窗口,在后面可以直接判断IsHandleCreated就可以知道窗口是否已经被打开了,没打开就再实例化一个,如果已经创建,在红框中判断是否最小化,然后正常显示窗口并置顶。)。

黄框就是显示这个窗口第二行就是添加委托任务的,但是现在还不需要,所以这句可以暂时忽略,后面会说。第三句就是将数据同步到副窗口,然后下一句显示窗口。

然后是副窗口传数据到主窗口。

需要使用委托。上述的主窗口到副窗口也可以用委托。

需要现在副窗口内创建委托事件。箭头所指的部分可以自定义名称,入口参数也可以自定义。

第一行先创建,第二行对应到具体使用的函数名称。

然后直接使用F_MoreSend_SyncData_To_Main(); 加参数即可传数据到主窗口。

调用以下函数发送数据到主窗口。 

这只是副窗口的设置,还需要设置主窗口程序。

主窗体需要创建一个名称不同的但是参数和参数名称都一样的函数,此函数会映射到副窗口中的发送函数。副窗口发来的数据会在此函数内处理。

 

 此外主窗体显示副窗口之前还需要将上述的两个映射函数对应起来。

完整代码

副窗口:

//*创建委托任务
public delegate void Form_MoreSend_SyncData_To_Form_Main(byte flag, byte count, string data);
public event Form_MoreSend_SyncData_To_Form_Main F_MoreSend_SyncData_To_Main;
//*发送数据
F_MoreSend_SyncData_To_Main(0, 0, "01 23 45 67 89");


//*同步主窗口数据
public void F_MoreSend_SyncData_From_From_Main(byte flag, byte count, string data)
{
}

主窗体:

//*处理副窗口数据
public void Form_SyncData_From_MoreSend(byte flag, byte count, string data)
{
}

//*创建窗口
Form_MoreSend F_MoreSend = new Form_MoreSend();

//*按键打开窗口
private void Button_MoreSendData_Click(object sender, EventArgs e)
{
    if (!F_MoreSend.IsHandleCreated) //*未打开则打开
    {
        F_MoreSend = new Form_MoreSend();
		//*建立映射关系,接收副窗口数据
        F_MoreSend.F_MoreSend_SyncData_To_Main += Form_SyncData_From_MoreSend;
//*发送数据到副窗口
        F_MoreSend.F_MoreSend_SyncData_From_From_Main(0, 0, "");
        F_MoreSend.Show();
    }
    else if (F_MoreSend.IsHandleCreated) //*已打开则显示
    {
        if (F_MoreSend.WindowState == FormWindowState.Minimized)
        {
            F_MoreSend.WindowState = FormWindowState.Normal;
        }
        //F_MoreSend.Focus();
        F_MoreSend.TopMost = true;
        F_MoreSend.TopMost = false;
    }
}

个人见解,感谢阅读。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python wxWidgets是一个用于创建跨平台图形用户界面(GUI)的工具包。它提供了丰富的控件和功能,可以用于开发各种类型的应用程序,包括串口通信应用。 要在Python wxWidgets中进行串口通信发送数据,你可以使用Python的`serial`库来实现。下面是一个简单的示例代码: ```python import wx import serial class SerialFrame(wx.Frame): def __init__(self, parent, title): super(SerialFrame, self).__init__(parent, title=title, size=(300,200)) # 创建串口对象 self.ser = serial.Serial('COM1', 9600) # 根据实际情况修改串口号和波特率 # 创建界面控件 panel = wx.Panel(self) self.text_ctrl = wx.TextCtrl(panel, style=wx.TE_MULTILINE) send_button = wx.Button(panel, label='Send') # 布局控件 sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.text_ctrl, proportion=1, flag=wx.EXP) sizer.Add(send_button, proportion=0, flag=wx.EXPAND) panel.SetSizer(sizer) # 绑定事件处理函数 send_button.Bind(wx.EVT_BUTTON, self.on_send_button) def on_send_button(self, event): data = self.text_ctrl.GetValue() # 获取文本框中的数据 self.ser.write(data.encode()) # 发送数据 app = wx.App() frame = SerialFrame(None, title='Serial Communication') frame.Show() app.MainLoop() ``` 上述代码创建了一个简单的窗口应用程序,其中包含一个文本框和一个发送按钮。当点击发送按钮时,程序会获取文本框中的数据,并通过串口发送出去。 请注意,上述代码中的串口号和波特率需要根据实际情况进行修改。另外,为了使串口通信正常工作,你可能还需要安装`pyserial`库,可以使用以下命令进行安装: ``` pip install pyserial ``` 希望以上信息对你有帮助!如果你还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值