如果匹配,检查下拉菜单

本文关键字:检查 下拉菜单 如果 | 更新日期: 2023-09-27 18:04:16

长话短说:有特定的标签给定(如流行,摇滚,金属),用户应该写入一个文本框,每次他添加一个字符给定的标签检查是否有一个(或多个)匹配。目前,我正在使用以下代码的组合框:

    private void EnterComboBox_TextChanged(object sender, EventArgs e)
    {
        List<string> AllTags = new List<string>();
        AllTags.Add("Pop");
        if (AlleTags[0].ToLower().StartsWith(EnterComboBox.Text.ToLower()))
        {
            EnterComboBox.Items.Clear();
            EnterComboBox.Items.Add("Pop");
            EnterComboBox.DroppedDown = true;
        }
    }

这是工作得很好,但问题是,在第一个字符输入后,dropbox下拉,输入的文本被标记,并将被覆盖,当一个新的字符输入。有什么好主意吗?每个想法都是受欢迎的,它不一定是一个组合框:)!

编辑:经过一些更详细的研究之后,我意识到我可以这样解释:基本上我想让组合框的行为像谷歌的搜索栏一样。用户输入字母,在下拉菜单中是自动完成建议

现在我是这样解决的:我在组合框前面放了一个文本框,这样只有组合框的箭头是可见的,如果你点击它,你会自动在文本框中写入。

    public Form1()
    {
        InitializeComponent();
        EingabeTextBox.AutoSize = false;
        EingabeTextBox.Size = new Size(243, 21);      //the size of the combobox is 260;21
    }
    private void EingabeTextBox_TextChanged(object sender, EventArgs e)
    {
        EingabeComboBox.Items.Clear();
        List<string> AlleTags = new List<string>();
        AlleTags.Add("Example");
        if (AlleTags[0].ToLower().StartsWith(EingabeTextBox.Text.ToLower()))
        {
            EingabeComboBox.Items.Add(AlleTags[0]);
            EingabeComboBox.DroppedDown = true;
        }
    }

对我来说是这样的。我希望我也能帮助其他人,但我仍然愿意接受任何更好的想法:)!

如果匹配,检查下拉菜单

在输入时更改组合框条目显然会产生不希望的干扰。而是将TextBox和ListBox组合在一起。

private bool changing;
private void TextBox_TextChanged(object sender, EventArgs e)
{
    if (!changing) {
        changing = true;
        try {
            // manipulate entries in the ListBox
        } finally {
            changing = false;
        }
    }
}
private void ListBox_IndexChanged(object sender, EventArgs e)
{
    if (!changing) {
        changing = true;
        try {
            // Put selected entry into TextBox
        } finally {
            changing = false;
        }
    }
}

changing守卫确保列表框在文本框中输入文本时不会影响文本框,反之亦然。

try-finally确保在任何情况下都将重置保护,即使发生异常。