通过USB驱动器进行迭代

时间:2015-10-15 13:54:52

标签: c# foreach combobox

我正在遍历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!"); }
}

我不确定我哪里出错了,我需要另外一双眼睛,但是当我打开表格并按下按钮时,新添加的驱动器不会填充到我的Combobox中。< / p>

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:2)

这一行:

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

正在检查comboBox1是否包含comboBox1的标题文本。

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

答案 1 :(得分:1)

在你的第二个如果你应该检查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语翻了过来整理一下

答案 2 :(得分:1)

我建议:

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