在c#中,使用自定义源时出现文本框问题

时间:2012-08-24 08:56:03

标签: c# autocomplete textbox

在c#中,我有一个带有listView自动完成源的文本框。 当我输入密钥时,文本框会填充该建议。 当我从列表中选择任何一个建议的文本时,它的工作正常。 但是当我尝试使用键盘(向下箭头)在填充列表中向下移动时,文本框中的文本将替换为列表中的第一个项目。我无法移动到列表中的第二项。

private void textbox1_TextChanged(object sender, EventArgs e)
{
    if (textbox1.Text != "")
    {
        TreeNode treeNode = TreeNode;
        string text = textbox1.Text;
        Boolean isContain = false;

        foreach (TreeNode subNode in treeNode.Nodes)
        {
            if (subNode.Name.StartsWith(text))
            {
                if (subNode.Name.StartsWith(text))
                    suggestStageName.Add(subNode.Name);
                isContain = true;
                if (subNode.Name.Equals(textbox1.Text))
                   do corresponding event
            }
        }
        if (isContain)
        {
            textbox1.AutoCompleteCustomSource = suggestStageName;
            textbox1.AutoCompleteMode = AutoCompleteMode.Suggest;                 
            textbox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
        }
    }
}       

1 个答案:

答案 0 :(得分:3)

此段不应位于textChanged事件中。你应该只分配一次。

textbox1.AutoCompleteCustomSource = suggestStageName;
textbox1.AutoCompleteMode = AutoCompleteMode.Suggest;                 
textbox1.AutoCompleteSource = AutoCompleteSource.CustomSource;

编辑:

试试这个:

private void Form1_Load(object sender, EventArgs e)
{

    AutoCompleteStringCollection suggestStageName = new AutoCompleteStringCollection();

    foreach (TreeNode subNode in treeNode.Nodes)
    {
        suggestStageName.Add(subNode.Name);
    }

    textBox1.AutoCompleteCustomSource = suggestStageName;
    textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;

}

将textChanged事件留空。 AutoComplete将为您完成所有工作。