当前位置: 代码迷 >> C# >> C# Combobox 当下拉列表关闭时,亟需展示输入的数据,不选中第一个匹配的数据
  详细解决方案

C# Combobox 当下拉列表关闭时,亟需展示输入的数据,不选中第一个匹配的数据

热度:92   发布时间:2016-05-05 04:59:40.0
C# Combobox 当下拉列表关闭时,需要展示输入的数据,不选中第一个匹配的数据
先上代码:
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.DropDownStyle = ComboBoxStyle.DropDown;
comboBox1.Items.Add("abc");
comboBox1.Items.Add("bcd");
comboBox1.Items.Add("cde");
}

private void comboBox1_TextUpdate(object sender, EventArgs e)
{

string text = comboBox1.Text;

if (!comboBox1.DroppedDown)
{
comboBox1.DroppedDown = true;
}
//防止微软的bug
comboBox1.Text = text;
Cursor.Current = Cursors.Default;
SendKeys.Send("{END}");
}

问题:当输入a并且comboBox1下拉列表闭合时,comboBox1会自动选中项”abc“,comboBox1的Text也变为abc;当输入b并且comboBox1下拉列表闭合时,comboBox1会自动选中项”bcd“,comboBox1的Text也变为bcd;
需求: 我想不让comboBox1自动选择匹配到的第一项,比如例子中输入a并且comboBox1下拉列表闭合时,comboBox1不要选中项”abc“,就展示为”a“,只有当用户鼠标选择下拉列表中的项时才展示选中的项;还有就是TextUpdate事件触发时,下拉列表必须为打开状态。

我试了很多,认为这是微软ComboBox内置的这种功能,不知道怎样能实现我需要的功能,希望高手解答。
------解决思路----------------------
的确是不好用,我是自己做的组合控件,
可以用一个ListBox,放在ComboBox下面,这样好控制,ComboBox里面不要内容,放在ListBox里面,ComboBox也可以换成textbox

------解决思路----------------------
这个不是微软内置的功能。自带的Combox实现不了你的要求。只能自己写用户控件了。

------解决思路----------------------
这个很简单啊!分两部分,1.取值,2.显示


  public string selected = "";
        private void comboBox1_DropDownClosed(object sender, EventArgs e)
        {
            ComboBox comb = (ComboBox)sender;
            comb.Text = selected;
        }

        private void comboBox1_TextChanged(object sender, EventArgs e)
        {
            ComboBox comb = (ComboBox)sender;
             selected = comb.Text;
        }
  相关解决方案