如何在c#中使用组合框发送命令
本文关键字:组合 命令 | 更新日期: 2023-09-27 18:03:44
我编写了一个代码,使用超链接单击事件向串行设备发送命令。由于我不断添加的超链接越来越多,因此我希望通过制作所有命令选项的下拉列表来简化应用程序,以便在单击特定的命令选项时,一个事件向串行端口触发该特定命令,就像单击链接时一样。我不知道如何设置这个,所以如果我能看到一个例子,它会很感激。下面是我的代码的一个例子,当链接被点击,我希望能够做到这一点,但之后从下拉列表选择而不是。
private void linkLabel_HC1_101_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (serialPort1.IsOpen)
{
var content = new List<byte>();
content.Add(2);
content.AddRange(Encoding.ASCII.GetBytes("01P00101##"));
content.Add(3);
byte[] buffer = content.ToArray();
serialPort1.Write(buffer, 0, buffer.Length);
}
}
private void HC2_101_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (serialPort1.IsOpen)
{
var content = new List<byte>();
content.Add(2);
content.AddRange(Encoding.ASCII.GetBytes("02P00101##"));
content.Add(3);
byte[] buffer = content.ToArray();
serialPort1.Write(buffer, 0, buffer.Length);
}
}
在您的ComboBox中,您可能希望显示用户友好的文本,而不是要发送的字节。创建一个带有两个字符串属性的类:
public class Command
{
public string DisplayText { get; set; }
public string CommandText { get; set; }
public Send(SerialPort serialPort)
{
if (serialPort.IsOpen) {
var content = new List<byte>();
content.Add(2);
content.AddRange(Encoding.ASCII.GetBytes(CommandText));
content.Add(3);
byte[] buffer = content.ToArray();
serialPort.Write(buffer, 0, buffer.Length);
}
}
public override string ToString()
{
return DisplayText;
}
}
重写ToString
非常重要。这使组合框能够正确显示项目。
现在你可以将这些命令添加到组合框中:
comboBox1.Add(new Command { DisplayText = "HC1 101", CommandText = "01P00101##" });
comboBox1.Add(new Command { DisplayText = "HC2 101", CommandText = "02P00101##" });
在组合框事件中…
void ComboBox1_SelectionChangeCommitted(object sender, EventArgs e)
{
var command = (Command)comboBox1.SelectedItem;
if (command != null) {
command.Send(serialPort1);
)
}
你也可以用"发送"按钮来代替。这使您可以重复发送相同的命令,而不必在组合框中重新选择它。
如果不同命令的开头和结尾字节不同,您也可以将它们包含在属性中。
这种方法的一个很好的效果是,你在一个单独的类中有传输逻辑,而不是在Form中,你不必再复制/粘贴send例程。
可以使用ComboBox的SelectedIndexChange事件
。
private void InitComboBox()
{
comboBox1.Items.Add("Command1");
comboBox1.Items.Add("Command2");
comboBox1.Items.Add("Command3");
comboBox1.Items.Add("Command4");
comboBox1.Items.Add("Command5");
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedItem.ToString().Equals("Command1"))
{
//Excute Command here
}
//...
}
如果你想简单点,创建静态字符串值的下拉列表。如果字符串是你要发送的,那就非常简单了。假设你的下拉菜单名为listbox
content.AddRange(Encoding.ASCII.GetBytes(this.listbox.Text));
如果你想让文本有所不同,你可以在下拉文本上做一个开关。
string bytesToGet = string.empty;
switch (listbox.Text){
case "H01":
bytesToGet = "01P00101##";
case "H02":
bytesToGet = "02P00101##";
}
content.AddRange(Encoding.ASCII.GetBytes(bytesToGet));
您还可以使用下拉列表框中的值与文本配对。如果需要,您可以在设计器中静态地创建这种配对,然后使用该值来保存要添加的字符串,例如
content.AddRange(Encoding.ASCII.GetBytes(listbox.SelectedItem.Value));