【问题标题】:Selecting an item in windows form listbox by typing?通过键入选择Windows表单列表框中的项目?
【发布时间】:2017-05-21 06:21:15
【问题描述】:

我有一个带有国家名称的列表框。我在 VS2015 (C#) 中使用 Windows 窗体。
通过键入在列表框中选择名称时,它只允许一个字母。因此,如果我键入“A”,它将跳转到以“A”开头的第一个项目,但如果我按“As”,则列表框会查看以“s”开头的项目。 我找到了组合框和文本框的答案:
Selecting an item in comboBox by typing
但看起来列表框不支持 AutoCompleteMode。 有什么解决办法吗?

【问题讨论】:

  • 我认为在 DropDownStyle.Simple 中使用组合框会更好
  • 查看 this 以获取有关如何执行此操作的完整教程。
  • @CodingYoshi 感谢您的帮助。我在那个帖子的基础上解决了我的问题。顺便说一句,有一个小错字,此行后缺少一个括号“{”: private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)

标签: c# listbox windows-forms-designer


【解决方案1】:

请考虑实施您自己的搜索方法。 ListBox 不支持设计所需的功能。无论如何,您可以为 TextBox 的 TextChanged 事件准备一个方法,该方法当时在集合中搜索结果。

【讨论】:

    【解决方案2】:
    【解决方案3】:

    您应该使用带有 DropDownStyle.Simple 的 ComboBox。 ListBox 从来没有打算拥有这个功能,强迫它这样做通常是浪费时间,最好花点时间。

    您可能还需要考虑第三方控件。例如,Telerik 有 DropDownList,它扩展了一个 ComboBox 并使其完全按照您的意愿执行,并提供有关执行方式的选项。

    【讨论】:

    • 感谢您的建议,我选择了另一种解决方案。我需要多选选项,而 ComboBox 没有。
    【解决方案4】:

    这里有一些示例代码。在 ListBox 上方放置一个 TextBox。适当地连接 TextChanged 事件,这应该模仿 ComboBox 的自动完成行为(例如)...

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
    
            listBox1.Items.AddRange(new[] { "Tom", "Dick", "Harry", "Henry" });
        }
    
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            var textBox = (TextBox)sender;
            listBox1.SelectedIndex = textBox.TextLength == 0 ?
                -1 : listBox1.FindString(textBox.Text);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 2021-11-23
      • 1970-01-01
      相关资源
      最近更新 更多