如何将ComboBox选中的NetworkInterface适配器传入GetDeviceInfo方法
解决ComboBox选中项转换为NetworkInterface对象的问题
方案一:直接绑定NetworkInterface对象(推荐)
直接将NetworkInterface实例添加到ComboBox,而非仅添加名称字符串,这样选中时可直接获取完整对象,避免后续查找匹配的麻烦:
// 修改ComboBox填充逻辑 foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) { cbox1.Items.Add(nic); } // 设置ComboBox显示对象的Name属性,界面仍显示设备名称,但后台存储完整对象 cbox1.DisplayMemberPath = "Name";
在SelectionChanged事件中直接获取选中的对象:
private void cbox1_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { NetworkInterface selectedAdapter = cbox1.SelectedItem as NetworkInterface; if (selectedAdapter != null) { string deviceInfo = GetDeviceInfo(selectedAdapter); // 此处可将deviceInfo展示到目标控件,如 textBox1.Text = deviceInfo; } }
方案二:根据选中名称查找对应NetworkInterface对象
如果已填充的是设备名称字符串,可通过名称匹配查找对应的对象:
private void cbox1_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { if (cbox1.SelectedItem == null) return; string selectedName = cbox1.SelectedItem.ToString(); // 通过名称匹配查找NetworkInterface(系统中设备名称通常唯一) NetworkInterface selectedAdapter = NetworkInterface.GetAllNetworkInterfaces() .FirstOrDefault(nic => nic.Name.Equals(selectedName, StringComparison.OrdinalIgnoreCase)); if (selectedAdapter != null) { string deviceInfo = GetDeviceInfo(selectedAdapter); // 此处可使用获取到的设备信息 } }
注意:方案二存在名称重复时匹配首个对象的风险,优先推荐方案一。
内容的提问来源于stack exchange,提问作者user838691
相关产品推荐
相关产品推荐

