我正在为串口做一个项目..
我需要从组合框中选择可用的com端口。
但我无法得到它......我需要一些帮助〜
这是我的代码..它在C#中:
btn_Open是一个激活串口的按钮
private void btnOpen_Click(object sender, EventArgs e)
{
string [] myPort;
int COM1 = cbCommPorts.SelectedIndex;
int COM2 = cbCommPorts.SelectedIndex;
int COM3 = cbCommPorts.SelectedIndex;
Object selectedItem = serialPort1.PortName;
myPort = System.IO.Ports.SerialPort.GetPortNames();
cbCommPorts.Items.AddRange(myPort);
serialPort1.PortName = cbCommPorts.SelectedItem.ToString();
serialPort1.BaudRate = 115200;
if (serialPort1.IsOpen) {
serialPort1.PortName = cbCommPorts.SelectedItem.ToString();
serialPort1.Open();
btnTransmit.Enabled = true;
btn2.Enabled = true;
btn3.Enabled = true;
}
cbCommPorts是我为组合框命名的名字
private void cbCommPorts_SelectedIndexChanged(object sender,EventArgs e) { int COM1 = cbCommPorts.SelectedIndex; int COM2 = cbCommPorts.SelectedIndex; int COM3 = cbCommPorts.SelectedIndex; Object selectedItem = serialPort1.PortName;
MessageBox.Show("COM PORT: " + selectedItem.ToString() + " Selected");
}
我的代码有问题吗?感谢..
答案 0 :(得分:5)
这是您在Windows窗体中使用它的一种方法
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Load += Form1_Load;
}
void Form1_Load(object sender, EventArgs e)
{
var ports = SerialPort.GetPortNames();
cmbSerialPorts.DataSource = ports;
}
private void btnOk_Click(object sender, EventArgs e)
{
if (cmbSerialPorts.SelectedIndex > -1)
{
MessageBox.Show(String.Format("You selected port '{0}'", cmbSerialPorts.SelectedItem));
Connect(cmbSerialPorts.SelectedItem.ToString());
}
else
{
MessageBox.Show("Please select a port first");
}
}
private void Connect(string portName)
{
var port = new SerialPort(portName);
if (!port.IsOpen)
{
port.BaudRate = 19200;
port.Open();
//Continue here....
}
}
}
话虽如此,除非您维护旧版软件, 看看WPF可能是个好主意。学习如何使用WPF而不是WinForms 准备好在Windows 8,Windows Phone等上进行开发......数据绑定功能使你想要做的事情变得非常简单。
答案 1 :(得分:0)
WPF代码样式
public void comboBox_DropDownOpened(object sender, EventArgs e)
{
string[] ports = SerialPort.GetPortNames();
foreach ( string comport in ports)
{
comboBox.Items.Add(comport);
}
}
.... /*Two control item combobox&button, comboxbox's item is COM port and It's first argument of Function 「System.IO.Ports.SerialPort 」. Using (comboBox.text) */
private void button1_Click(object sender, RoutedEventArgs e)
{
System.IO.Ports.SerialPort Port = new SerialPort
((comboBox.Text), 115200, Parity.None, 8, StopBits.One);
try
{
Port.Open();
Port.Write(cmdByteArray, 0, cmdByteArray.Length );
}
catch { Exception ex; }
Port.Read(readbyte, 0, readbyte.Length);
答案 2 :(得分:0)
private void comboBox_DropDownOpened(object sender, EventArgs e)
{
string[] ports = SerialPort.GetPortNames();
comboBox.Items.Clear();
foreach (string comport in ports)
{
comboBox.Items.Add(comport);
}
}
除了 ysjia 帖子。
如果你不添加.Clear();每次点击它都会进一步扩展。你会有重复的。