我正在遍历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>
任何帮助都将不胜感激。
答案 0 :(得分:2)
这一行:
if (comboBox1.Items.Contains(comboBox1.Text))
正在检查comboBox1是否包含comboBox1的标题文本。
您应该检查它是否包含dl
或dt
或d.Name
答案 1 :(得分:1)
在你的第二个如果你应该检查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语翻了过来整理一下
答案 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!"); }
}