Winforms,我可以在这里使用文本框而不是组合框吗? (超过 15k 选项的下拉列表)

Posted

技术标签:

【中文标题】Winforms,我可以在这里使用文本框而不是组合框吗? (超过 15k 选项的下拉列表)【英文标题】:Winforms, can I use a text box here instead of a combobox? (dropdown list with over 15k options) 【发布时间】:2021-05-20 04:04:21 【问题描述】:

在过去的几周里,我一直在为工作构建一个产品演示,其中包括一个用于输入新客户查询信息的 winform。其中一个表单元素是一个文本框,为了方便起见,到目前为止我还没有对其进行任何验证。但是,我现在需要让用户只能从 sql 数据库表(包含大约 15k 条街道)中输入有效位置。

我对 C# 编程还是很陌生。我的第一个想法是我应该将我的文本框更改为组合框,但我似乎记得当您单击组合框时,列表中的所有选项都会在您输入任何内容之前出现。由于我们的计算机速度很慢并且有很多选项,我真的不想让屏幕泛滥,所以我想知道是否有办法可以继续使用我的文本框和 onkeypress(可能是 tab 键)弹出一个对话框列表中所有最接近的匹配项,提示用户选择有效选项?

如果没有,有没有办法阻止我的组合框在出现提示之前显示选项列表?

【问题讨论】:

嗨,看看这个链接c-sharpcorner.com/blogs/… 我可能会选择带有validation 和Auto-Complete 的TextBox。 Echo Fildor 的评论,并使自动补全源动态化;不要在其中放入 15k 个项目,在用户键入 3 个字符后执行数据库搜索并在其中放入更多有限的行数 【参考方案1】:

我认为组合框不适合这么多项目。

我的方法是使用单独的列表视图来显示匹配项。您可能可以将匹配项放在下拉式无边框窗口中,但我发现这更复杂,并且可能难以使交互正常工作。 我只想将街道放在单独的列表视图控件中并对其应用过滤器。

确保视图可调整大小,当使用旧的窗口控件时,我发现它非常令人沮丧,因为它是为 640x480 屏幕编写的,并且不允许调整大小。

请记住性能,在每次按键搜索时,您可能希望获取所有记录并在内存中进行搜索,而不是为每个键进行 sql 查询。

【讨论】:

以上是关于Winforms,我可以在这里使用文本框而不是组合框吗? (超过 15k 选项的下拉列表)的主要内容,如果未能解决你的问题,请参考以下文章

创建自动完成组合框和文本框而不区分结果 C#.net

使用模型表单集时如何呈现文本框而不是选择框

LibreOffice 将 PDF 转换为 Word 作为文本框而不是普通文档

带有按钮、组合框和文本框的 C# WinForms (.NET Framework) DataGridView:使用按钮添加新行以添加组合框项时出错

C# - Winforms - Combobox - 避免选择更新数据源的第一项

在 c# winforms 中扩展文本框