ComboBox自动完成行为

时间:2012-11-29 17:19:52

标签: c# winforms

我们有一个ComboBox(下拉样式),其中包含AutoCompleteMode = SuggestAppend和AutoCompleteSource = ListItems。

每当我们打开下拉列表然后开始在组合框的文本字段部分写入时,sugest框覆盖所有下拉列表的列表,但下拉值列表仍然保持焦点,我们无法选择任何项目最大的盒子。

这是一种非常讨厌的行为,我希望这不是它的默认行为。其他人有同样的问题,并发现如何防止它?

1 个答案:

答案 0 :(得分:1)

您使用的是AutoCompleteMode属性。您的问题是建议框包含列表下拉列表。这是自动完成的另一种方法。

//ComboBox TextChanged Event
    private void txtName1_TextChanged(object sender, EventArgs e)
    {
        SqlDataAdapter daTemp = new SqlDataAdapter("select Name from Names where Name like '" + txtName1.Text + "%'", strConnection);
        DataTable dtTemp = new DataTable();
        daTemp.Fill(dtTemp);
        MessageBox.Show(dtTemp.Rows.Count.ToString());
        String[] Names = new String[dtTemp.Rows.Count + 1];
        if (dtTemp.Rows.Count > 0)
        {
            for (int x = 0; x <= dtTemp.Rows.Count - 1; x++)
            {
                Names[x] = dtTemp.Rows[x][0].ToString();
            }
        }
        else
        {
            MessageBox.Show("Data not found");
        }
        contextMenuStrip1.Items.Clear();
        for (int y = 0; y <= dtTemp.Rows.Count - 1; y++)
        {
            //Set The Desired Location (e.g. Besides of ComboBox) Of ContextMenuStrip
            contextMenuStrip1.Left = 80;
            contextMenuStrip1.Top = 90;
            contextMenuStrip1.Items.Add(Names[y].ToString());
            contextMenuStrip1.Visible = true;
        }
    }

同样的事情可以应用于DropDownLost。现在,您从ContextMenuStrip中选择适当的值,并将其提供给您的ComboBox(或DropDownList)。 为此,请将以下代码添加到ContextMenuStrip的ItemClicked事件中。

private void contextMenuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
    {
        txtName1.Text = e.ClickedItem.ToString();
    }