通过USB驱动器迭代
本文关键字:迭代 驱动器 USB 通过 | 更新日期: 2023-09-27 18:17:55
我在Form_Load
事件上遍历所有连接的USB驱动器并将它们填充到Combobox
中。这工作得很好,但是,我现在有一个按钮,我想用它来刷新列表并添加任何不存在的列表。
这是我使用的代码:
private void btnRefresh_Click(object sender, EventArgs e)
{
try
{
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)
{
if (d.IsReady == true)
{
string dl = d.VolumeLabel;
string dt = Convert.ToString(d.DriveType);
if (comboBox1.Items.Contains(comboBox1.Text))
{
}
else
{
comboBox1.Items.Add(d.Name.Remove(2));
}
}
comboBox1.SelectedIndex = 0;
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
}
}
catch { MessageBox.Show("Error retrieving Drive Information", "Error!"); }
}
我不确定我哪里出错了,我需要另一双眼睛,但是当我打开表单并点击按钮时,新添加的驱动器不会填充到我的组合框中。
这一行:
if (comboBox1.Items.Contains(comboBox1.Text))
正在检查comboBox1是否包含comboBox1的标题文本,它确实包含。
您应该检查它是否包含dl
或dt
或d.Name
在你的第二个如果你应该检查d.Name
,而不是comboBox1.Text
本身。您也没有清除Form_Load
我建议将人口代码提取到自己的方法中,并从Form_Load
和btnRefresh_Click
调用,而不是复制逻辑。
这个新方法看起来像这样:
private void PopulateDrives()
{
try
{
combobox.items.clear()
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)
{
if (d.IsReady == true)
{
string dl = d.VolumeLabel;
string dt = Convert.ToString(d.DriveType);
comboBox1.Items.Add(d.Name.Remove(2));
}
comboBox1.SelectedIndex = 0;
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
}
}
catch { MessageBox.Show("Error retrieving Drive Information", "Error!"); }
}
然后您只需从两个地方调用PopulateDrives()
。我还把第二个if语句颠倒了一下让它更整洁一些
我建议:
private void btnRefresh_Click(object sender, EventArgs e)
{
try
{
comboBox1.Items.Clear();
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)
{
if (d.IsReady)
{
string dl = d.VolumeLabel;
string dt = Convert.ToString(d.DriveType);
comboBox1.Items.Add(d.Name.Remove(2));
}
}
comboBox1.SelectedIndex = 0;
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
}
catch { MessageBox.Show("Error retrieving Drive Information", "Error!"); }
}