namespace SerialPort { public partial class Form3 : Form { delegate void UpdateTextEventHandler(string text); //委托,此为重点 public static readonly string connStr = AppHelper.GetConfigValue("SqliteStr"); public Form3() { InitializeComponent(); } #region 窗体加载 private void Form3_Load(object sender, EventArgs e) { serialPort1.PortName = "COM1"; serialPort1.BaudRate = 9600; serialPort1.Open(); serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived); //txtReceive.Text = "1.25"; } #endregion #region 关闭窗体 private void btnClose_Click(object sender, EventArgs e) { if (serialPort1.IsOpen) { serialPort1.Close(); } this.Close(); } #endregion #region 委托侦测 private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { string SDateTemp = this.serialPort1.ReadExisting(); if (!string.IsNullOrEmpty(SDateTemp)) { SDateTemp = GetValue(SDateTemp, "GS", "kg").Trim(); //多少kg } this.Invoke(new UpdateTextEventHandler(UpdateTextBox), new string[] { SDateTemp }); } private void UpdateTextBox(string text) { if (!string.IsNullOrEmpty(text)) { txtReceive.Text = text; } } #endregion #region 获得字符串中开始和结束字符串之间的值 /// <summary> /// 获得字符串中开始和结束字符串之间的值 /// </summary> /// <param name="str">字符串</param> /// <param name="s">开始</param> /// <param name="e">结束</param> /// <returns></returns> public static string GetValue(string str, string s, string e) { Regex rg = new Regex("(?<=(" + s + "))[.\s\S]*?(?=(" + e + "))", RegexOptions.Multiline | RegexOptions.Singleline); return rg.Match(str).Value; } #endregion } }
有form1与form2两个窗体,启动form1 form1的button.click打开form2,在form2的textbox中输入文本在form1的textbox中同步显示
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Demo0003 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 fr2 = new Form2(); //即便你不用实时监控但你也要知道你委托给谁去办事了吧 //他会带来你需要的信息 然后你该干吗就干吗 fr2.fangfa += fuzhi; fr2.Show(); } public void fuzhi(string str) { this.textBox1.Text = str; } } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Demo0003 { public delegate void delegateclass(string str); public partial class Form2 : Form { //哦明白了 public event delegateclass fangfa; public Form2() { InitializeComponent(); } private void textBox1_KeyUp(object sender, KeyEventArgs e) { string str = this.textBox1.Text; Form1 f1 = new Form1(); //我变化啦 fangfa(str); //多窗体间为多线程传递只能使用委托亲 } } }