我正在文件夹中搜索exe文件,并在组合框中显示文件名以供用户选择。当用户按下按钮时,所选文件应被打开。如果我在组合框中显示文件路径而不是文件名,则此操作有效。
public void Form1_Load(object sender, EventArgs e)
{
string[] filePaths = Directory.GetFiles(@"C:\myFolder\", "*.exe");
foreach (string file in filePaths)
{
comboBox1.Items.Add(Path.GetFileNameWithoutExtension(file));
}
}
private void button1_Click(object sender, EventArgs e)
{
object b = comboBox1.SelectedItem;
string be = Convert.ToString(b);
System.Diagnostics.Process.Start(be);
}
3条答案
按热度按时间u91tlkcl1#
对于要执行的程序,你需要完整的路径。对于显示,给予用户一个方向的名称就足够了。现在剩下的唯一事情就是将一个Map到另一个。为此,你可以使用一个简单的字典。收集所有的名称作为键,对应的路径作为值。只显示名称。
然后使用名称作为键从字典中检索路径
编辑:
如Panagiotis Binding示例所示:
要使用绑定,您需要在组合框中指定要显示的内容和要作为值处理的内容。您可以通过告诉
DisplayMember
和ValueMember
应该使用字典的哪个属性来完成。此外,字典必须包含在BindingSource
中。在本例中,您需要使用
SelectedValue
属性来检索字典项的值,即完整路径。cetgtptt2#
你不需要把字符串放入
ComboBox
--你可以把其他对象放入,ComboBox
将使用.ToString()
来获取要显示的字符串。这意味着您可以像这样编写一个 Package 类来包含您需要的信息:
那么填充
ComboBox
的代码将类似于:按钮处理程序如下所示:
ie3xauqp3#
请使用数据系结,而不要逐一加入项目,并使用
DisplayMember
属性指定要显示的属性。How to: Bind a Windows Forms ComboBox or ListBox Control to Data显示数据系结的运作方式。一个选项是将所有文件的列表作为FileInfo对象加载,并将它们设置为组合的
DataSource
属性,然后使用Name
作为DisplayMember:您也可以在combo的属性中设置
DisplayMember
。FileInfo
没有返回不带扩展名的名称的属性,并且DisplayMember
不接受表达式。如果需要显示名称,可以创建自己的类来保存文件和名称: