C# WinForms组合框下拉列表和自动完成窗口都会出现

C# WinForms组合框下拉列表和自动完成窗口都会出现,c#,winforms,combobox,autocomplete,C#,Winforms,Combobox,Autocomplete,我在winforms应用程序上有一个带有以下代码的组合框: comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems; DataTable t = new DataTable(); t.Columns.Add("ID", typeof(int)); t.Columns.Add("Display", typeof(

我在winforms应用程序上有一个带有以下代码的组合框:

comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;

DataTable t = new DataTable();
t.Columns.Add("ID", typeof(int));
t.Columns.Add("Display", typeof(string));

for (int i = 1; i < 2000; i++)
{
    t.Rows.Add(i, i.ToString("N0"));
}

comboBox1.DataSource = t;
comboBox1.ValueMember = "ID";
comboBox1.DisplayMember = "Display";
comboBox1.AutoCompleteMode=AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource=AutoCompleteSource.ListItems;
DataTable t=新的DataTable();
t、 添加(“ID”,typeof(int));
t、 添加(“显示”,类型(字符串));
对于(int i=1;i<2000;i++)
{
t、 添加(i,i.ToString(“N0”));
}
comboBox1.DataSource=t;
comboBox1.ValueMember=“ID”;
comboBox1.DisplayMember=“显示”;
然后,当窗口打开时,我执行以下步骤:

  • 单击
    组合框
    下拉按钮——这将显示项目列表并选择
    组合框中的文本
  • 键入“5”、“1”。。。i、 我正在寻找使用自动完成搜索515,516等
  • 您将看到“自动完成”窗口现在显示在下拉列表的顶部。但是,如果我将鼠标悬停在自动完成窗口后面的模糊下拉窗口上,它将接收鼠标事件,包括单击。所以我想我点击了一个自动完成的项目,但实际上点击了一些我看不到的完全随机的东西
  • 这是
    组合框中的错误吗?如果有必要的话,我正在使用Windows7。我配置的组合框是否有误

    还要注意,使用键盘时使用“自动完成”下拉列表。因此,上/下箭头键使用前窗口,而鼠标使用后窗口


    这很奇怪。你的代码在我看来很好,我多次使用自动完成功能a,但它没有显示下拉列表和自动完成列表

    我的建议是

    • 在显示/值成员之后设置数据源。我不记得为什么了,但另一个引起了一些问题

      comboBox1.ValueMember = "ID";
      comboBox1.DisplayMember = "Display";
      comboBox1.DataSource = t;
      
    • 在代码末尾设置AutoCompleteSource(添加DataSouce后)


    也许这会有帮助。

    只需从PropertyGrid设置属性,就可以获得复制。在Win7和Windows XP中都以这种方式运行


    这是本文中记录的破坏行为。如前所述,微软没有考虑修复。一种可能的解决方法是在下拉事件处理程序中禁用自动完成,然后在DropDownClosed事件处理程序中重新启用它。

    若要一次只打开一个,可以使用comboBox1。Droppeddown=true打开常规的,false则自动完成将只显示在/a按键事件中

        Dim box As ComboBox = sender
        box.DroppedDown = False
    

    我是一名巴西利亚编码专业的学生,为了在我的项目中修复它,我浪费了很多时间。在这里,我在几秒钟内就看到了

    我的代码如下所示:

    private void populateCombos()
        {
            persist.ShowLst(dspMember, vlMember,varTable,lstBox,varWhere);
            persist.ShowLst(dspMember, vlMember,varTable,ddlist1,varWhere);
            persist.ShowLst(dspMember, vlMember,varTable, ddlist2,varWhere);
    
            ddList1.Text = null;
            ddList2.Text = null;
    
            lstBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            lstBox.AutoCompleteSource = AutoCompleteSource.ListItems;
            lstBox.Text = null;
        }
    

    您只需在集合中添加项

    现在选择组合框的属性选项 AutoCompleteSource=ListItems 自动完成模式=建议


    注意:根据您的要求,自动完成源代码有许多选项:)

    WinForms ComboBox下拉列表…答案是…
    在comboBox1输入事件中写入以下代码

    private void comboBox1_Enter(object sender, EventArgs e)
    {
        comboBox1.DroppedDown = true;
    }
    
    现在,对于comboBox1自动完成…
    在页面加载事件中写入此
    AutoComplete()
    。这样它就可以工作了

    public void AutoComplete()
    {
        try
        {
            MySqlConnection conn = new 
            MySqlConnection("server=localhost;database=databasename;user
                id=root;password=;charset=utf8;");
            MySqlCommand cmd = new MySqlCommand("select distinct
                (columnName) from tablename", conn);
            DataSet ds = new DataSet();
            MySqlDataAdapter da = new MySqlDataAdapter(cmd);
            da.Fill(ds, "tablename");
            AutoCompleteStringCollection col = new
            AutoCompleteStringCollection();
    
            int i = 0;
            for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
            {
                col.Add(ds.Tables[0].Rows[i]["columnName"].ToString());
            }
            comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
            comboBox1.AutoCompleteCustomSource = col;
            comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
            if (conn.State == ConnectionState.Open)
            {
                conn.Close();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK,
        MessageBoxIcon.Error);
        }
    }
    
    public void自动完成()
    {
    尝试
    {
    MySqlConnection conn=新建
    MySqlConnection(“server=localhost;database=databasename;user
    id=root;password=;charset=utf8;“”;
    MySqlCommand cmd=新的MySqlCommand(“选择不同的
    (columnName)摘自tablename(康涅狄格州);
    数据集ds=新数据集();
    MySqlDataAdapter da=新的MySqlDataAdapter(cmd);
    da.填写(ds,“表格名称”);
    AutoCompleteStringCollection col=new
    AutoCompleteTestringCollection();
    int i=0;
    
    对于(i=0;i向您的
    组合框添加一行代码
    KeyDown
    事件,问题就解决了

    private void comboBox_NameAndID_KeyDown(object sender, KeyEventArgs e)
    {
        comboBox_NameAndID.DroppedDown = false;
    }
    

    从设计视图中选择组合框,并将“无”设置为“自动完成模式”属性。

    从设计视图中选择组合框并设置“附加”对于AutoCompleteMode属性,这将在不显示窗口的情况下建议该项目。

    这些更改没有任何影响。您是否能够复制该问题?如果没有,您使用的是什么操作系统?谢谢!这有什么问题?他们只是想让您两全其美!!有一个简单而有效的解决方法。但是自从所以告诉我不要回答评论中的问题,我不会。但我确实在下面回答了它…作为回答。我讨厌看到人们来寻找答案,看看这个问题的公认答案——这并不能真正解决他们的问题——然后不回答就离开。在你成为这些人中的一员之前,看看你的答案这个问题是我的名字…它真的可以轻松彻底地解决这个问题。请查看@JoeGayetty的答案。如果microsoft不考虑解决问题。人们用什么来代替那个有缺陷的datagridview?你在接受的答案下的评论吸引了我的注意力。谢谢。它真的解决了问题。非常感谢你的回答和评论,它解决了我很久以来遇到的一个问题。。。