c# ComboBox 防止下拉后选择项目

c# ComboBox prevent selecting item after dropdown

我对 visual studio 中的组合框有特定问题。 我用它让用户在组合框的文本框部分键入文本,这会立即启动 SQL 请求。 结果应显示在组合框的下拉列表部分。 (DropDownStyle 设置为 DropDown)

private void UpdateParent(object sender, EventArgs e)
        {
            ParentListChange(); //Update the listitems

            //prevent from opening at the beginning
            if (!ParentSelect.Text.Trim().Equals("")) 
            {
                //my problem
                ParentSelect.DroppedDown = true;

                Cursor.Current = Cursors.Default;
            }
        }

但是一旦打开下拉菜单,第一个项目就会被选中,整个文本将粘贴到文本框中。 因此,如果您开始连续写多于一个字母,则第一个 "disappears" 因为第二个键入的字母会替换所选文本。

我知道有一个类似的 post 但答案没有帮助,因为它们会很慢(用户必须等待大约一秒钟才能输入):

private void comboBox1_TextUpdate(object sender, EventArgs e)
    {
        var savedText = comboBox1.Text;
        comboBox1.DroppedDown = true;
        comboBox1.Text = savedText;
        comboBox1.Select(savedText.Length, 0);
    }

或者无法打开下拉列表,这是必不可少的:

comboBox1.DropDownStyle = ComboBoxStyle.DropDown;
comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;

有没有办法只禁用 "select first item" 东西?

实现的一种方法是custom user control

您可以 TextBox 重叠您的 ComboBox

因此,用户将仅与文本框交互,根据在 TextBox 中输入的文本(使用适当的事件 - 按键就可以),您可以在数据库中查询并加载 ComboBox查询结果。