Comment activer combobox en premier clic (Datagridview))

dans winforms, vous devez cliquer sur le combobox deux fois pour l'activer correctement - la première fois pour le mettre au point, la deuxième fois pour obtenir réellement la liste déroulante.

comment modifier ce comportement pour qu'il s'active dès le premier clic?

pour DataGridView combobox.

27
demandé sur philu 2012-10-22 08:53:52

5 réponses

je me rends compte que c'est une vieille question, mais j'ai pensé que je donnerais ma solution à n'importe qui là-bas qui pourrait avoir besoin d'être en mesure de le faire.

bien que je n'ai pas pu trouver de réponses pour faire exactement cela... J'ai trouvé un réponse à une autre question qui m'a aidé.

C'est ma solution:

private void datagridview_CellEnter(object sender, DataGridViewCellEventArgs e)
    {
        bool validClick = (e.RowIndex != -1 && e.ColumnIndex != -1); //Make sure the clicked row/column is valid.
        var datagridview = sender as DataGridView;

        // Check to make sure the cell clicked is the cell containing the combobox 
        if(datagridview.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn && validClick)
        {
            datagridview.BeginEdit(true);
            ((ComboBox)datagridview.EditingControl).DroppedDown = true;
        }
    }

le code ci-dessus doit être lié à L'événement CellEnter du datagridview.

j'espère que cela aidera!

edit: , a Ajouté un index de colonne de vérifier pour éviter de s'écraser lorsque l'ensemble de la ligne est sélectionnée.

Merci, Up All Night pour le modifier

edit2: le Code doit maintenant être lié au CellEnter plutôt qu'à L'événement CellClick.

Merci, Haraldduch pour l'édition ci-dessus

45
répondu Jeff Click 2017-05-23 12:10:26

définissez ce qui suit sur votre DataGridView:

EditMode = EditOnEnter

C'est probablement la solution la plus facile et a été la solution de contournement pour de nombreux utilisateurs ici sur Donc quand cette question est posée.


modifier :

Par ici faire ce qui suit:

définir le mode D'édition:

EditMode = EditOnKeystrokeOrF2

Modifier le EditingControlShowing événement sur le datagridview:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    ComboBox ctl = e.Control as ComboBox;
    ctl.Enter -= new EventHandler(ctl_Enter);
    ctl.Enter += new EventHandler(ctl_Enter);

}

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

vous obtiendrez les résultats désirés. Laissez-moi savoir si ce n'est pas cela.

24
répondu KreepN 2017-05-23 11:47:26

si vous définissez la grille entière à EditOnEnter, vous pouvez obtenir une activité assez funky quand vous êtes sur une colonne de texte. Voici ma solution, qui devrait être explicite. Si vous ne connaissez pas les noms des colonnes, vous pouvez simplement vérifier le type de cellule sur mousemove.

Private Sub GridView_CellMouseMove(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles GridView.CellMouseMove
    Select Case GridView.Columns(e.ColumnIndex).Name
        Case "Ad_Edit", "Size_Caption", "Demo_Code"
            GridView.EditMode = DataGridViewEditMode.EditOnEnter
        Case Else
            GridView.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2
    End Select
End Sub
1
répondu jefferp 2013-03-17 18:59:29

j'ai changé seulement la propriété EditMode du datagridview en EditOnEnter et ça marche parfaitement.

EditMode  = EditOnEnter
1
répondu Yudit 2017-12-06 07:37:01

définit la propriété DropDownStyle de votre boîte combo à DropDownList...

0
répondu Abdul Majid 2012-10-22 05:20:17