2

C# では、listView からのオートコンプリート ソースを含むテキスト ボックスがあります。キーを入力すると、テキストボックスに提案が入力されます。リストから提案されたテキストのいずれかを選択すると、正常に機能します。しかし、キーボード (下矢印) を使用してデータが入力されたリストを下に移動しようとすると、テキスト ボックスのテキストがリストの最初の項目に置き換えられます。リストの 2 番目の項目に移動できません。

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;
        }
    }
}       
4

1 に答える 1

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 イベントを空のままにします。オートコンプリートがすべての作業を行います。

于 2012-08-24T09:06:41.237 に答える