c# - 如何为 ComboBox 中的文件列表启用自动完成

标签 c# winforms combobox

我尝试获取用户桌面上的所有“.txt”文件,并将它们作为自定义源显示在 ComboBox 中,如下所示。顺便说一句,我通过 IDE 创建了 ComboBox。下面的代码位于 form1_Load 事件中:

string desktop_path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string[] files_on_desktop = System.IO.Directory.GetFiles(desktop_path, "*.txt");
AutoCompleteStringCollection file_collection = new AutoCompleteStringCollection();
file_collection.AddRange(files_on_desktop);
comboBox1.AutoCompleteCustomSource = file_collection;
comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;

尽管我尝试了许多不同的方式以及许多支持代码,例如“this.Refresh()”或combobox.Refresh(),但这似乎不起作用”。

当我打开下拉菜单时,它不显示文件,当我开始键入时,它也不显示文件。

实际上,每当我尝试动态执行可以在 IDE 上执行的操作时,都会遇到一些问题。

最佳答案

您添加的文件包括路径和文件名,例如C:\Users\R.Aghaei\Desktop\Test.txt。如果您只需要查看文件名,可以使用 System.IO.Path.GetFileName(x) 来仅获取文件名。

此外,如果您只想显示这些文件名以用于自动完成,则 TextBox 就足够了。如果您想使用ComboBox,最好将这些文件添加到 Items 集合中,然后将自动完成源设置为列出项目。

AutoCompleteSourceItems 不同。您应该将这些文件名添加到 Items 中,以便在单击下拉按钮时显示。为此,只需使用 comboBox1.Items.AddRange(files_on_desktop);。然后只需将 AutoCompleteSourceMode 设置为 AutoCompleteSource.ListItems 即可。然后你就拥有了这两个项目并自动完成。如果您单击下拉按钮,您将看到所有可用的项目。如果您仅在框中键入内容,自动完成功能将适合您。

string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
var files = System.IO.Directory.GetFiles(desktopPath, "*.txt")
                                .Select(x => System.IO.Path.GetFileName(x)).ToArray();
comboBox1.Items.AddRange(files);
comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;

关于c# - 如何为 ComboBox 中的文件列表启用自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39680183/

相关文章:

javascript - 可编辑组合框 Javascript 和 HTML

javascript - 从 C# 到 javascript 的 Unicode 转换

.net - 如何右对齐 DataGridView 列中的文本?

c# - CheckedListBox C# 的 RepeatDirection 属性

c# - 仅用一个 try-catch 捕获应用程序中的所有异常

c++ - 如何将 sender() 名称转换为 int

combobox - 微软访问: Display two columns in combo-box

c# - 创建 System.Drawing.Point 类型的运行时对象时出错

c# - AutoMapper.dll 中出现“AutoMapper.AutoMapperMappingException”

c# - 将字符串转换为十进制,保留分数