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