我有一个带有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#中是否有可能?
答案 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");