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.
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
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.
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
j'ai changé seulement la propriété EditMode
du datagridview
en EditOnEnter
et ça marche parfaitement.
EditMode = EditOnEnter
définit la propriété DropDownStyle de votre boîte combo à DropDownList...