【问题标题】:Get number of items left in combobox in SuggestAppend AutoComplete mode在 SuggestAppend 自动完成模式下获取组合框中剩余的项目数
【发布时间】:2015-12-20 10:41:12
【问题描述】:

我有一个 AutoCompleteMode = SuggestAppend 和 AutoCompleteSource=ListItems 的组合框。

在SuggestAppend中,当用户输入字符时,列表框控件会被自动过滤。

我想在用户输入期间获取列表框中的项目数。 一开始,列表框已完全填充。

我尝试了以下方法,但它总是返回组合中的项目数,而不是列表框中过滤的项目数

int count = ItemsComboBox.Items.Count.ToString();

【问题讨论】:

    标签: c# winforms combobox autocomplete


    【解决方案1】:

    我不是 100% 确定您想要做什么,但据我了解,目标是自动启用按钮。

    ComboBox 类具有称为 ControlAdded 和 ControlRemoved 的事件,它们在从 ComboBox.Items 添加或删除控件时发生。因此,您可以在每次添加/删除控件后检查 comboBox.Items.Count 的值。

    private void comboBox1_ControlRemoved(object sender, ControlEventArgs e)
            {
                    if (comboBox1.Items.Count == 0) button1.Enabled = false;
            }
    

    当然,如果您不仅要检查大约 0,您还需要同时处理 ControlAdded 和 Control Removed 事件。您可以通过双击 Visual 中 ComboBox 的属性窗口中的事件名称旁边的来执行此操作Studio 会将以下行添加到您的 Designer 文件中:

    this.comboBox1.ControlRemoved += new System.Windows.Forms.ControlEventHandler(this.comboBox1_ControlRemoved);
    

    您可以为这两个事件使用相同的 void(这当然取决于您的项目)。

    【讨论】:

    • 感谢您的努力,但这不是我的意思,我相应地更新了我的帖子。我希望现在会更清楚。
    • 抱歉造成了误会。我不知道一个好方法,也许我错了,但建议检查项目的开头,不是吗?如果是真的,你可以使用一些 LINQ:int count = (comboBox1.Items.Cast<string>()).Where(x => x.Substring(0, comboBox1.Text.Length).ToLower() == comboBox1.Text.ToLower()).Count();
    • 项目不包含 Cast 的定义
    【解决方案2】:

    这对我有用,但我将 AutoCompleteMode = SuggestAppend 更改为 AutoCompleteMode = Suggest

    Public Class Form2
    
      Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Me.ComboBox1.Text = ""
        Me.ComboBox1.Items.Add("a")
        Me.ComboBox1.Items.Add("aaa")
        Me.ComboBox1.Items.Add("combo")
        Me.ComboBox1.Items.Add("combobox")
        Me.ComboBox1.Items.Add("combobox test")
        Me.ComboBox1.Items.Add("common")
        Me.ComboBox1.Items.Add("common dialog")
      End Sub
    
      Private Sub ComboBox1_TextChanged(sender As Object, e As System.EventArgs) Handles ComboBox1.TextChanged
        Dim count As Integer = 0
    
        For Each op As String In ComboBox1.Items
          If (op Is Nothing OrElse op.Length < ComboBox1.Text.Length) Then
            Continue For
          End If
          If (ComboBox1.Text = op.Substring(0, ComboBox1.Text.Length)) Then
            count += 1
          End If
        Next
    
        Label1.Text = count
      End Sub
    
    End Class
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      相关资源
      最近更新 更多