如果匹配,检查下拉菜单
本文关键字:检查 下拉菜单 如果 | 更新日期: 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确保在任何情况下都将重置保护,即使发生异常。