通过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!"); }
}

我不确定我哪里出错了,我需要另一双眼睛,但是当我打开表单并点击按钮时,新添加的驱动器不会填充到我的组合框中。

通过USB驱动器迭代

这一行:

if (comboBox1.Items.Contains(comboBox1.Text))

正在检查comboBox1是否包含comboBox1的标题文本,它确实包含。

您应该检查它是否包含dldtd.Name

在你的第二个如果你应该检查d.Name,而不是comboBox1.Text本身。您也没有清除Form_Load

中初始填充后的列表。

我建议将人口代码提取到自己的方法中,并从Form_LoadbtnRefresh_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!"); }
}