Ouvrez la liste déroulante (dans une vue datagrid) des éléments en un seul clic

Comment puis-je éviter le double clic sur un DropDownButton utilisé dans un DataGridView ? En ce moment, je suis en mesure de voir les éléments de baisse vers le bas dans le DataGridView en cliquant deux ou plusieurs fois. Première fois qu'il sélectionne la cellule et la deuxième fois quand je clique sur le DropDownButton flèche, il montre la liste. Comment puis-je obtenir la même chose en un seul clic?

20
demandé sur matrix 2011-06-14 14:46:29

3 réponses

vous pouvez y parvenir en vous abonnant pour l'événement EditingControlShowing de la grille et là pour le contrôle de type ComboBox

ComboBox ctl = e.Control as ComboBox;
ctl.Enter -= new EventHandler(ctl_Enter);
ctl.Enter += new EventHandler(ctl_Enter);

et dans L'événement Enter, utiliser la propriété

void ctl_Enter(object sender, EventArgs e)
{
    (sender as ComboBox).DroppedDown = true;
}

DroppedDown indique comme le nom suggère si la zone de dropdown est montrée ou non, donc chaque fois que la commande est entrée cela la définira à true et afficher les articles sans avoir besoin de clics supplémentaires.

15
répondu V4Vendetta 2011-06-14 11:17:03

Set EditMode propriété de la DataGridView à EditOnEnter : lien

DataGridView.EditMode - Obtient ou définit une valeur indiquant comment commencer à éditer une cellule.

EditOnEnter - L'édition commence lorsque la cellule reçoit la mise au point.

18
répondu algreat 2013-01-23 15:22:33

la propriété "définir le mode D'édition de DataGridView à EditOnEnter" a fonctionné pour moi, mais j'ai trouvé un autre problème: l'utilisateur ne peut pas supprimer une ligne en sélectionnant et en appuyant sur la touche DEL. Ainsi, une recherche google m'a donné une autre façon de le faire. Il suffit d'attraper L'événement CellEnter et de vérifier si la cellule est le type approprié pour effectuer l'action appropriée comme CE Code échantillon:

private void Form_OnLoad(object sender, EventArgs e){
    dgvArmazem.CellEnter += new DataGridViewCellEventHandler(dgvArmazem_CellEnter);
}

void dgvArmazem_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            DataGridView dg = (DataGridView)sender;

            if (dg.CurrentCell.EditType == typeof(DataGridViewComboBoxEditingControl))
            {
                SendKeys.Send("{F4}");
            }
        }

maintenant le ComboBox descend plus vite et l'utilisateur supprime encore une ligne en sélectionnant une ligne et en appuyant sur la touche SUPPR.

C'est ça.

6
répondu Michel Vaz Ramos 2013-07-29 05:36:16