C# 在SuggestAppend自动完成模式下获取组合框中剩余的项目数

C# 在SuggestAppend自动完成模式下获取组合框中剩余的项目数,c#,winforms,combobox,autocomplete,C#,Winforms,Combobox,Autocomplete,我有一个带有AutoCompleteMode=SuggestAppend和AutoCompleteSource=ListItems的组合框 在SuggestAppend中,当用户输入字符时,listbox控件将自动过滤 我想在用户输入期间获取列表框中的项目数。 开始时,列表框已完全填充 我尝试了以下方法,但它总是返回组合中的项数,而不是列表框中过滤的项数 int count = ItemsComboBox.Items.Count.ToString(); 我不是100%确定你想要做什么,但据我所

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

在SuggestAppend中,当用户输入字符时,listbox控件将自动过滤

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

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

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

我不是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和ControlRemoved事件。您可以通过双击Visual Studio中组合框属性窗口中事件名称旁边的内容来执行此操作,这将在设计器文件中添加以下行:

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

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

这对我来说是可行的,但我将
AutoCompleteMode=SuggestAppend
更改为
AutoCompleteMode=SuggestAppend

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
公共类表单2
私有子表单2_Load(发送方作为System.Object,e作为System.EventArgs)处理MyBase.Load
Me.ComboBox1.Text=“”
Me.ComboBox1.Items.Add(“a”)
Me.ComboBox1.Items.Add(“aaa”)
Me.ComboBox1.Items.Add(“组合”)
Me.ComboBox1.Items.Add(“组合框”)
Me.ComboBox1.Items.Add(“组合框测试”)
Me.ComboBox1.Items.Add(“通用”)
Me.ComboBox1.Items.Add(“公共对话框”)
端接头
私有子ComboBox1_TextChanged(发送方作为对象,e作为System.EventArgs)处理ComboBox1.TextChanged
Dim计数为整数=0
对于ComboBox1.Items中的每个op As字符串
如果(op为Nothing或LSE op.Length
谢谢你的努力,但这不是我的意思,我相应地更新了我的帖子。我希望现在会更清楚。对不起,误解了情况。我不知道一个好方法,也许我错了,但是这个建议检查了项目的开始,不是吗?如果是真的,您可以使用一些LINQ:
int count=(comboBox1.Items.Cast()).Where(x=>x.Substring(0,comboBox1.Text.Length)。ToLower()==comboBox1.Text.ToLower()).count()项不包含强制转换的定义