目的:我想用两个窗体互相连续传送telegramm(这里需要循环语句,问题1),也就是需要两个窗体都定义协议类型,然后进行协议的接收和发送(问题2),下面是我的代码:
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 Simple_Serial
{
public partial class Form1 : Form
{
// Add this variable string RxString;
Form2 secondForm = new Form2(); public Form1()
{
InitializeComponent();
secondForm.Show();
} private void buttonStart_Click(object sender, EventArgs e)
{
serialPort1.PortName = "COM1";
serialPort1.BaudRate = 9600; serialPort1.Open();
if (serialPort1.IsOpen)
{
buttonStart1.Enabled = false;
buttonStop1.Enabled = true;
textBox1.ReadOnly = false;
}
} private void buttonStop_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.Close();
buttonStart1.Enabled = true;
buttonStop1.Enabled = false;
textBox1.ReadOnly = true;
} } private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// If the port is closed, don't try to send a character. if (!serialPort1.IsOpen) return; // If the port is Open, declare a char[] array with one element.
char[] buff = new char[1]; // Load element 0 with the key character. buff[0] = e.KeyChar; // Send the one character buffer.
serialPort1.Write(buff, 0, 1); // Set the KeyPress event as handled so the character won't
// display locally. If you want it to display, omit the next line.
e.Handled = true; }
private void DisplayText(object sender, EventArgs e)
{
textBox1.AppendText(RxString);
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
RxString = serialPort1.ReadExisting();
this.Invoke(new EventHandler(DisplayText)); } private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen) serialPort1.Close(); } private void textBox1_TextChanged(object sender, EventArgs e)
{ } private void Form1_Load(object sender, EventArgs e)
{ }
}
}
以上代码是窗体1的,现在他可以往串口1上面写数据,仅仅是数据,还不是telegramm,由于不会c#,请各位大侠先帮我改一下在生成窗体是先定义我的数据类型是协议。
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 Simple_Serial
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} private void buttonStart_Click(object sender, EventArgs e)
{
serialPort2.Open();
if (serialPort2.IsOpen)
{
buttonStart2.Enabled = false;
buttonStop2.Enabled = true;
textBox2.ReadOnly = false;
}
} private void buttonStop_Click(object sender, EventArgs e)
{
if (serialPort2.IsOpen)
{
serialPort2.Close();
buttonStart2.Enabled = true;
buttonStop2.Enabled = false;
textBox2.ReadOnly = true;
}
} private void textBox1_TextChanged(object sender, EventArgs e)
{
}
}
}
以上代码是窗体2的,我模仿窗体1生成的窗体2,而现在的目的就是如我帖子刚开头写的一样,希望各位高手帮帮忙,或者给点资料或者链接。谢谢啦!
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 Simple_Serial
{
public partial class Form1 : Form
{
// Add this variable string RxString;
Form2 secondForm = new Form2(); public Form1()
{
InitializeComponent();
secondForm.Show();
} private void buttonStart_Click(object sender, EventArgs e)
{
serialPort1.PortName = "COM1";
serialPort1.BaudRate = 9600; serialPort1.Open();
if (serialPort1.IsOpen)
{
buttonStart1.Enabled = false;
buttonStop1.Enabled = true;
textBox1.ReadOnly = false;
}
} private void buttonStop_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.Close();
buttonStart1.Enabled = true;
buttonStop1.Enabled = false;
textBox1.ReadOnly = true;
} } private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// If the port is closed, don't try to send a character. if (!serialPort1.IsOpen) return; // If the port is Open, declare a char[] array with one element.
char[] buff = new char[1]; // Load element 0 with the key character. buff[0] = e.KeyChar; // Send the one character buffer.
serialPort1.Write(buff, 0, 1); // Set the KeyPress event as handled so the character won't
// display locally. If you want it to display, omit the next line.
e.Handled = true; }
private void DisplayText(object sender, EventArgs e)
{
textBox1.AppendText(RxString);
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
RxString = serialPort1.ReadExisting();
this.Invoke(new EventHandler(DisplayText)); } private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen) serialPort1.Close(); } private void textBox1_TextChanged(object sender, EventArgs e)
{ } private void Form1_Load(object sender, EventArgs e)
{ }
}
}
以上代码是窗体1的,现在他可以往串口1上面写数据,仅仅是数据,还不是telegramm,由于不会c#,请各位大侠先帮我改一下在生成窗体是先定义我的数据类型是协议。
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 Simple_Serial
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} private void buttonStart_Click(object sender, EventArgs e)
{
serialPort2.Open();
if (serialPort2.IsOpen)
{
buttonStart2.Enabled = false;
buttonStop2.Enabled = true;
textBox2.ReadOnly = false;
}
} private void buttonStop_Click(object sender, EventArgs e)
{
if (serialPort2.IsOpen)
{
serialPort2.Close();
buttonStart2.Enabled = true;
buttonStop2.Enabled = false;
textBox2.ReadOnly = true;
}
} private void textBox1_TextChanged(object sender, EventArgs e)
{
}
}
}
以上代码是窗体2的,我模仿窗体1生成的窗体2,而现在的目的就是如我帖子刚开头写的一样,希望各位高手帮帮忙,或者给点资料或者链接。谢谢啦!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货