Lorsque j'utilise EditionMode = Edidonenter, la cellule Entrez sur EditionMode lorsque je sélectionne la ligne. P>
Il est difficile d'utiliser l'utilisateur de sélectionner le RowSelector pour supprimer la ligne. P>
Connaissez-vous un tour? P>
4 Réponses :
Vous devez comprendre que votre programme ne peut pas vraiment lire la pensée de l'utilisateur et comprendre lorsque vous entrez le mode édition, mais quand ne le faites pas. p>
L'utilisateur peut appuyer sur la touche d'échappement pour annuler le mode édition, puis la ligne peut être supprimée. Vous pouvez également choisir d'autres datagridVieweditmode (voir http: // msdn.microsoft.com/en-us/library/system.windows.forms.dataGridVieweditMode.aspx ), par exemple DataGridVieweditMode.editonkeystroke ou Editonkeystrokeorf2 qui sont tous deux bons du point de vue de la convivialité. P>
Je connais tous les autres modes. Les utilisateurs veulent un mode Excel comme. J'utilise Editonenter uniquement sur le DGV usagé fréquent. Je sais comment supprimer une ligne, mais instruire chaque utilisateur sur ce comportement .... La touche ESC peut annuler la modification, mais sur ce mode, entrez en mode édition. Je ne comprends pas pourquoi la sélection du rownelector, Do'nt met fin en mode d'édition. Une solution consiste à déplacer le curseur vers une cellule non modifiable.
J'essaie cette astuce:
Si l'utilisateur clique sur une en-tête de ligne, modifiez l'EDITMODE sur Si l'utilisateur clique ailleurs , Modifiez l'EdiDmode en EDITONKEYSTRAKEORF2 CODE> et terminez l'édition. P>
Edidonenter CODE> et commencez la modification. P>
Private Sub dgv2_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv2.CellClick
If e.ColumnIndex = -1 Then
dgv2.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2
dgv2.EndEdit()
ElseIf dgv2.EditMode <> DataGridViewEditMode.EditOnEnter Then
dgv2.EditMode = DataGridViewEditMode.EditOnEnter
dgv2.BeginEdit(False)
End If
End Sub
C'était vraiment utile, j'ai combiné cela avec l'événement "CellprevieweyDown", permettant de laisser le mode d'édition de cellule en appuyant sur la touche ESC
J'ai également trouvé cela utile, mais s'il y avait une cellule déjà en mode édition, et j'ai sélectionné plus d'une ligne à supprimer, il a laissé l'une des lignes en mode édition, la suppression de ce que la suppression de ne pas fonctionnait. J'ai ensuite déplacé ce code dans l'événement CellMouseUp CODE> et cela a fonctionné à la façon dont je voulais. Merci pour cela!
Cela doit vraiment être fait sur Mousedown. Cellule Cliquez sur les événements Incendie sur MouseUp:
Private Sub ProductsGrid_MouseDown(sender As Object, e As MouseEventArgs) Handles ProductsGrid.MouseDown Dim grid = DirectCast(sender, DataGridView) Dim info = grid.HitTest(e.X, e.Y) If into.Type = DataGridViewHitTestType.RowHeader OrElse info.Type = DataGridViewHitTestType.TopLeftHeader Then grid.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2 grid.EndEdit() ElseIf grid.EditMode <> DataGridViewEditMode.EditOnEnter Then grid.EditMode = DataGridViewEditMode.EditOnEnter End If End Sub
Vous pouvez modifier l'accent sur la commande parent. Qui va forcer la cellule à mettre fin à l'édition sans avoir à changer le mode lui-même.
Par exemple, cet extrait laissera le mode d'édition si vous sélectionnez une autre cellule. P>
protected override void OnSelectionChanged(EventArgs e) { base.OnSelectionChanged(e); if (SelectedCells.Count > 1) { // leave edit mode Parent?.Focus(); } }