如何使用可用的串口获得组合框?

时间:2017-09-17 21:04:01

标签: c# wpf combobox serial-port

我有一个带有ComboBox的C#应用​​程序,用户可以在其中选择要使用的COM端口。我使用可用的com端口填充ComboBox,如下所示:

 string[] strPortsList = SerialPort.GetPortNames();
 Array.Sort(strPortsList);
 Combobos.ItemsSource = strPortsList;

到目前为止,效果很好。我有一个COM1,COM2,COM5等列表。当用户选择一个com端口时,我可以打开它。

现在的问题是用户仍然需要知道哪个COM端口是正确的,例如serial2USB电缆。他仍然需要转到设备管理器并检查适配器获得的com端口的名称。

如果在我的下拉列表中可以看到COM端口的名称,如“COM1(serial2usb)”,“COM2(NMEA端口)”,那将是很棒的......然后他可以选择正确的端口而不需要设备管理员。当我检查所选项目时,我只想要COM1或COM2或......作为结果。

这在C#中是否有可能?

2 个答案:

答案 0 :(得分:0)

创建一个代表Port

的类
public class Port
{
    public string Name { get; set; }
    public string Desc { get; set; }

    public override string ToString()
    {
        return string.Format("{0} ({1})", Name, Desc);
    }
}

试试这个:

List<Port> ports;
using (var searcher = new ManagementObjectSearcher("SELECT * FROM WIN32_SerialPort"))
{
        string[] portnames = SerialPort.GetPortNames();
        var x = searcher.Get().Cast<ManagementBaseObject>().ToList();
        ports = (from n in portnames
        join p in x on n equals p["DeviceID"].ToString() into np
                    from p in np.DefaultIfEmpty()
                    select new Port() { Name = n, Desc = p != null ? p["Description"].ToString() : string.Empty }).ToList();
}

Combobos.ItemsSource = ports;
Combobos.SelectedValuePath = "Name";

您需要添加对System.Management.dll的引用。

然后,您可以通过访问ComboBox属性来获取SelectedValue中的所选值:

string port = Combobos.SelectedValue.ToString();

答案 1 :(得分:0)

这在MVC .NET中对我有用:

ViewBag.PortaName = new SelectList(ports.ToList(), "Name", "Name");