I have program which list HDD drives and Network interfaces like in this picture:

If I click on HDD name I can see drive type in text box. This is working fine. However if I try this code on network interface its not working. It gave error CS0144: Cannot create an instance of the abstract type or interface 'NetworkInterface'
Here is code:
private void button2_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
textBox1.Text = "";
DriveInfo[] Drives = DriveInfo.GetDrives();
foreach (DriveInfo drv in Drives)
{
listBox1.Items.Add(drv.Name);
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
String strDrive = (string)listBox1.SelectedItem;
DriveInfo drive = new DriveInfo(strDrive);
textBox1.Text = drive.DriveType.ToString();
}
And here is not working network interfaces:
private void button3_Click(object sender, EventArgs e)
{
listBox2.Items.Clear();
textBox2.Text = "";
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter in adapters)
{
listBox2.Items.Add(adapter.Name);
}
}
private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
String strInterface = (string)listBox2.SelectedItem;
NetworkInterface adapter = new NetworkInterface(strInterface);
textBox2.Text = adapter.Description.ToString();
}
This line is wrong: NetworkInterface adapter = new NetworkInterface(strInterface);
CodePudding user response:
From the NetworkInterface docs:
You do not create instances of this class; the
GetAllNetworkInterfacesmethod returns an array that contains one instance of this class for each network interface on the local computer.
So you can call GetAllNetworkInterfaces again and filter the results:
var adapter = NetworkInterface.GetAllNetworkInterfaces()
.FirstOrDefault(ni => ni.Name == strInterface);
// if not null ...
Or store results of previous call in some field/property and use those for search. Or just use the result array as datasource for listBox2 itself.
CodePudding user response:
You can store the NetworkInterface instances directly in the list box items:
listBox2.Items.Add(adapter);
And set listBox2.DisplayMember = nameof(NetworkInterface.Name) to make the list box display their names.
Then you can access the selected adapter as:
var adapter = (NetworkInterface)listBox2.SelectedItem;;
