对如何迭代这个集合感到困惑
Confused about about how to iterate this collection
我想做的是获取所有可用的网络适配器
键和值 pairs.So 我有 class 命名适配器由两个变量组成,第一个是保持
注册表项,第二个是
保留适配器名称,例如(无线、本地等)。这是我的代码
List<Adapters> GetAdapterNames(string regPath)
{
List<Adapters> list = new List<Adapters>();
RegistryKey key = RootNode(regPath, false);
if (key != null)
{
string[] par = key.GetSubKeyNames();
foreach (string node in par)
{
if (node != "Descriptions")
{
RegistryKey keys = RootNode(regPath+"\"+node + "\Connection", false);
string name = keys.GetValue("Name").ToString();
list.Add(new Adapters(name,node));
}
}
return list;
这是我的适配器class
class Adapters
{
private string _name;
private string _val;
public string Name
{
get { return _name; }
set { _name = value; }
}
public string Val
{
get { return _val; }
set { _val = value; }
}
public Adapters(string name,string value)
{
_name = name;
_val = value;
}
}
问题是如何将此列表提供给组合框并在其中循环。
像这样
private const string ADAPTER_PATH =
@"SYSTEM\ControlSet001\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}";
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
List<Adapters>adapters= GetAdapterNames(ADAPTER_PATH);
combobax.valueMember=//list.name
combobax.displayMember=list.node;
}
根据您获得的示例(请参阅 How to create a Minimal, Complete, and Verifiable example 以获取有关如何在您的问题中提供良好代码示例的建议),以下方法可行:
private void Form1_Load(object sender, EventArgs e)
{
List<Adapters>adapters= GetAdapterNames(ADAPTER_PATH);
combobax.DataSource = adapters;
combobax.ValueMember = "Name";
combobax.DisplayMember = "Val";
}
您可以将 IList
的任何实现分配给 ComboBox
的 DataSource
属性。
ValueMember
和 DisplayMember
属性可用于控制从 SelectedValue
属性 返回什么值以及在 ComboBox
中显示什么字符串] 本身,分别。它们是 string
值,其中包含用于填充 ComboBox
.
对象的 class 的 属性 的名称
备注:
- 我不知道
combobax
是否真的是您表单中包含对 ComboBox
对象的引用的字段的正确名称。那是你输入的,所以这就是我留在这里的。
- 显示节点注册表项名称并使用 "friendly" 适配器名称作为值成员似乎有点奇怪。但同样,这就是您输入的内容,所以这就是我在示例中显示的内容。
我想做的是获取所有可用的网络适配器 键和值 pairs.So 我有 class 命名适配器由两个变量组成,第一个是保持 注册表项,第二个是 保留适配器名称,例如(无线、本地等)。这是我的代码
List<Adapters> GetAdapterNames(string regPath)
{
List<Adapters> list = new List<Adapters>();
RegistryKey key = RootNode(regPath, false);
if (key != null)
{
string[] par = key.GetSubKeyNames();
foreach (string node in par)
{
if (node != "Descriptions")
{
RegistryKey keys = RootNode(regPath+"\"+node + "\Connection", false);
string name = keys.GetValue("Name").ToString();
list.Add(new Adapters(name,node));
}
}
return list;
这是我的适配器class
class Adapters
{
private string _name;
private string _val;
public string Name
{
get { return _name; }
set { _name = value; }
}
public string Val
{
get { return _val; }
set { _val = value; }
}
public Adapters(string name,string value)
{
_name = name;
_val = value;
}
}
问题是如何将此列表提供给组合框并在其中循环。 像这样
private const string ADAPTER_PATH =
@"SYSTEM\ControlSet001\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}";
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
List<Adapters>adapters= GetAdapterNames(ADAPTER_PATH);
combobax.valueMember=//list.name
combobax.displayMember=list.node;
}
根据您获得的示例(请参阅 How to create a Minimal, Complete, and Verifiable example 以获取有关如何在您的问题中提供良好代码示例的建议),以下方法可行:
private void Form1_Load(object sender, EventArgs e)
{
List<Adapters>adapters= GetAdapterNames(ADAPTER_PATH);
combobax.DataSource = adapters;
combobax.ValueMember = "Name";
combobax.DisplayMember = "Val";
}
您可以将 IList
的任何实现分配给 ComboBox
的 DataSource
属性。
ValueMember
和 DisplayMember
属性可用于控制从 SelectedValue
属性 返回什么值以及在 ComboBox
中显示什么字符串] 本身,分别。它们是 string
值,其中包含用于填充 ComboBox
.
备注:
- 我不知道
combobax
是否真的是您表单中包含对ComboBox
对象的引用的字段的正确名称。那是你输入的,所以这就是我留在这里的。 - 显示节点注册表项名称并使用 "friendly" 适配器名称作为值成员似乎有点奇怪。但同样,这就是您输入的内容,所以这就是我在示例中显示的内容。