Winformes ComboBox DropDown et la fenêtre Autocomplete les deux apparaissent

j'ai un ComboBox sur une application winforms avec ce code:

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";

je suis alors ces étapes quand la fenêtre s'ouvre:

  1. cliquez sur le ComboBox liste déroulante -- cela affiche la liste des éléments et sélectionne le texte dans le ComboBox
  2. de Type '5', '1' ... c'est à dire que je suis à la recherche d'utiliser la saisie semi-automatique pour rechercher 515, 516, etc.
  3. vous verrez que la fenêtre autocomplete apparaît maintenant en haut de la liste déroulante. Cependant si j'ai de la souris plus, c'est la fenêtre de chute cachée derrière la fenêtre autocomplete qui reçoit les événements de la souris, y compris le clic. Donc je pense que je clique sur un item autocomplete mais en fait je clique sur quelque chose de totalement aléatoire que je ne peux pas voir.

Est-ce un bug dans le ComboBox? J'utilise Windows 7 si ça compte. Suis-je configurer le ComboBoxmal en quelque sorte?

Notez aussi que l'utilisation du clavier utilise le menu déroulant autocomplete. Donc les flèches Haut/Bas sont utiliser la fenêtre avant, mais la souris utilise la fenêtre arrière.

enter image description here

27
demandé sur DaveInCaz 2010-06-17 23:07:39

10 réponses

pas de problème pour obtenir un repro pour cela simplement en définissant les propriétés du PropertyGrid. Se comporte de cette façon à la fois dans Win7 et Windows XP.

C'est cassé le comportement documenté dans ce article. Comme indiqué, Microsoft n'envisage pas de correction. Une solution possible est de désactiver autocomplete dans un handler D'événement DropDown et de le réactiver dans un handler D'événement Dropdownclosé.

21
répondu Hans Passant 2010-06-18 13:03:14

Ajouter une seule ligne de code à votre ComboBoxKeyDown événement et le problème est résolu!

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

Source

19
répondu Joe Gayetty 2016-12-06 10:43:44

je suis un étudiant brésilien de l'encodage et je perds de nombreuses heures à chercher à le corriger im mon projet. Et ici, je l'ai vu en quelques secondes!!!

Mon code ressemble à cela:

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;
    }
2
répondu Wilton Alves 2014-12-01 05:16:52

Ajouter/un événement keypress.

    Dim box As ComboBox = sender
    box.DroppedDown = False
1
répondu ComboBoxNerd 2014-05-05 06:15:09

C'est weired. Votre code me semble très bien et j'ai utilisé cette fonction AutoComplete plusieurs fois et elle n'a pas montré à la fois le DropDown et la liste AutoComplete.

Ma suggestion serait

  • définir la source de données après les membres Display/Value. Je ne sais plus pourquoi, mais l'autre a causé des problèmes.

    comboBox1.ValueMember = "ID";
    comboBox1.DisplayMember = "Display";
    comboBox1.DataSource = t;
    
  • définir la source AutoCompleteSource à la fin de votre code (après avoir ajouté DataSouce)

Peut-être cela peut vous aider.

0
répondu Jürgen Steinblock 2010-06-17 19:37:20

pour avoir un seul ouvert à la fois vous pouvez utiliser comboBox1.Droppeddown = true ouvrir l'ordinaire, la faux de la saisie semi-automatique n'apparaîtra

0
répondu AC25 2014-04-07 19:37:18

il vous suffit d'ajouter un article dans collection.

Maintenant allez propriétés option de la boîte bascule choisir AutoCompleteSource=ListItems AutocompleteMode=suggest

remarque: la saisie semi-automatique de la source ont de nombreuses options selon vos besoins :)

0
répondu vivek verma 2015-06-18 18:54:00

WinForms Zone De Liste Déroulante Liste Déroulante...la réponse est celle-ci...

écrivez le code ci-dessous dans l'événement enter de comboBox1..

private void comboBox1_Enter(object sender, EventArgs e)
{
    comboBox1.DroppedDown = true;
}

maintenant pour comboBox1 AutoComplete...

écrire ce AutoComplete() au chargement de la page de l'événement..donc il travail...

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);
    }
}
0
répondu Lalit 2016-12-06 10:43:21

sélectionnez le ComboBox à partir de la vue design et définissez "None" à la propriété AutoCompleteMode.

0
répondu Saurav Das 2017-01-21 12:19:03

sélectionnez le ComboBox à partir de la vue design et réglez "ajouter" à la propriété AutoCompleteMode, cela suggérera l'élément sans avoir une fenêtre.

0
répondu Saurav Das 2017-03-04 12:04:36