我在C#中为我的Arduino做了一点申请。一切正常,但问题出在我的应用程序中。用户可以在numericUpDown中选择他/她的COM端口。
它可以工作,但是如果用户选择了错误的端口并尝试连接,它会崩溃,所以我认为我需要一个IF消息来提供消息。例如,错误的端口等,但我不知道如何制作它。我该怎么办?
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;
using System.IO;
using System.IO.Ports;
namespace IO_Arduino_experiment_project
{
public partial class Form1 : Form
{
public static System.IO.Ports.SerialPort serialPort1;
private delegate void LineReceivedEvent(string line);
public Form1()
{
InitializeComponent();
button5.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
}
private void button1_Click(object sender, EventArgs e) // Connect Button
{
System.ComponentModel.IContainer components = new System.ComponentModel.Container();
serialPort1 = new System.IO.Ports.SerialPort(components); // Creating the new object.
serialPort1.PortName = "COM" + numericUpDown1.Value.ToString(); // Setting what port number.
serialPort1.BaudRate = 9600;
serialPort1.DtrEnable = true;
serialPort1.Open(); // Open the port for use.
button1.Text = "Connected.";
button1.Enabled = false;
numericUpDown1.Enabled = false;
button5.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen) serialPort1.Close();
}
private void button2_Click(object sender, EventArgs e)
{
serialPort1.Write("1");
textBox1.Text = "LED is on!";
button2.Enabled = false;
button3.Enabled = true;
}
private void button3_Click(object sender, EventArgs e)
{
serialPort1.Write("0");
textBox1.Text = "LED is off!";
button2.Enabled = true;
button3.Enabled = false;
}
private void button4_Click(object sender, EventArgs e)
{
Close();
}
private void button5_Click(object sender, EventArgs e)
{
serialPort1.Close();
button1.Enabled = true;
numericUpDown1.Enabled = true;
}
}
}
答案 0 :(得分:1)
您应该使用ComboBox
或其他列表控件/菜单替换数字向上/向下,这些列表控件/菜单在表单打开时或单击刷新按钮时(或通过其他自动方式,如计时器)填充
可以使用ComboBox
方法填充List
或GetPortNames
: -
String[] pNames;
pNames = System.IO.Ports.SerialPort.GetPortNames();
如果您想要执行您所描述的内容,那么您可以使用类似的代码在尝试使用之前查找端口以查看它是否存在: -
if (System.IO.Ports.SerialPort.GetPortNames().indexOf("COM" + thePortNum.ToString())>-1)
请注意GetPortNames()
会返回如下列表: -
COM1
COM10
COM12