Comment faire pour éviter d'aller à la ligne suivante après la modification de la DataGridViewTextBoxColumn et en appuyant sur EnterKey?
Je suis en train de travailler sur un programme avec DataGridViews
.
Dans un DatagridView
il y a un DataGridViewTextBoxColumn
, qui est activé à être modifié par l'utilisateur. Lorsque l'utilisateur se fait à taper le nombre dans ce, il appuie sur ENTRÉE sur le clavier. Maintenant, le DataGridView
fait tout son Events
, et après tout Events
, la dernière chose est le problème.
Tout est fait, et Windows va choisir le prochain DataGridViewRow
, et je ne suis pas capable d'empêcher cela.
J'ai essayé
if (e.KeyData == Keys.Enter) e.SuppressKeyPress = true; //or e.Handled
dans presque tous les cas, j'ai trouvé. Malheureusement je n'ai pu Empêcher la touche ENTRÉE lorsque le DataGridViewTextBoxColumn
n'est pas en mode d'édition.
Heres ma methode t trouver l'ENTRÉE alors que dans l'Édition
L'ajout de l'Événement
private void dgr_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.Control.KeyPress += new KeyPressEventHandler(dgr_KeyPress_NumericTester);
}
Et c'est le cas pour accepter l'entrée numérique uniquement.
private void dgr_KeyPress_NumericTester(object sender, KeyPressEventArgs e)
{
if (!Char.IsDigit(e.KeyChar) && e.KeyChar != 8) e.Handled = true;
}
Pour expliquer dans le détail:
Lorsque l'utilisateur entre une Valeur, qui a une certaine dependings, je voudrais donner un autre contrôle du focus, de sorte qu'il est utilisé pour corriger la dependings.
J'ai aussi essayé avec DependingControl.Focus()
mais le dernier "entrée" va être la dernière chose sur la vue.
Ce que quelqu'un sait comment faire pour éviter cela?
ProcessCmdKey
, voir [ici pour savoir comment](windowsclient.net/blogs/faqs/archive/2006/05/30/... ) et [pourquoi][2] [2]: blogs.msdn.com/b/jfoscoding/archive/2005/01/24/359334.aspxOriginalL'auteur Max | 2011-04-24
Vous devez vous connecter pour publier un commentaire.
Bien, j'ai réussi à obtenir quelque chose de travail qui fait ce que vous voulez (ou au moins, ne la partie la plus difficile, je pense que vous avez déjà fait la plupart des autres trucs) mais la solution la rend ma peau ramper.
Ce que j'ai pour "annuler" la touche entrée de l'événement lors de l'édition d'une cellule que l'utilisation d'un mélange de la
CellEndEdit
événement et leSelectionChanged
événement.J'ai introduit un couple de niveau de la classe de champs de stocker de l'état - en particulier quel rang nous sommes à la fin de l'édition d'une cellule et si nous sommes à l'arrêt d'un changement de la sélection.
Le code ressemble à ceci:
Vous aurez envie de tester ce fond de assurez-vous que c'est exactement ce dont vous avez besoin. J'ai seulement vérifié pour voir que c'est arrêter une ligne de changement lorsque vous appuyez sur entrée d'un contrôle de l'édition.
Comme je l'ai dit - je ne suis pas trop heureux avec qui ont besoin de faire quelque chose comme cela: il se sent très fragile, et tout comme elle pourrait avoir bizarre effets secondaires. Mais si vous devez avoir ce comportement, et de la tester et je pense que c'est la seule façon de faire ce que vous voulez.
DataGridViewCheckBoxCell
je ne doit pas définir resetRow, becourse il va en prison mon attention dans la Case.if (dataGridView1.CurrentCell is DataGridViewCheckBoxCell) resetRow = false;
Je travaillais avec SelectedRow au lieu de changer la CurrentCell de la propriété, et ce n'était pas bien dans mon test... maintenant sa belle, merci beaucoup pour cette!OriginalL'auteur David Hall
J'ai essayé de changer l'Entrée de comportement pour votre Grille en héritant d'un customcolumn de
Zone de texte de la colonne et en remplaçant la ci-dessous événement
Donc au lieu de la Touche Entrée soit envoyé il imite l'action de l'Onglet qui va passer à la cellule suivante. Espérons que cela aide
OriginalL'auteur V4Vendetta
C'est juste une solution de contournement, pas une vraie solution, mais il fonctionne.
OriginalL'auteur Antonello Cuccu
Je sais que cette question a été posée depuis longtemps mais la réponse peut être utile pour ceux qui recherche dans l'avenir, je l'espère. la meilleure solution est d'utiliser votre colonne personnalisée et pour la zone de texte facile, car nous allons profiter de la construite dans les classes
puis nous arrivons à la dgv lui-même, j'ai utilisé une nouvelle classe dérivée de DataGridView et ajouté mes colonnes et manipulées de la touche enter de la wndproc aussi
OriginalL'auteur ahmedsafan86
Vous pouvez le faire simplement....
1...Créer l'Événement KeyDown pour que l'affichage de la grille.(Allez dans les propriétés sur le contrôle gridview et double-cliquez sur l'événement KeyDown).
2...Passé ce code -
3...Enfin sa ressemble à ceci.
4..Exécutez le programme et voir.
OriginalL'auteur Shehan Silva
Cette réponse vient vraiment en retard...
Mais j'ai eu exactement le même Problème et ne souhaitez pas mettre en cache les lignes etc.
J'ai donc googlé autour et c'est ma solution à la question. Les crédits à Comment prévenir la touche Entrée de presse de la fin de EditMode dans un DataGridView?
Hériter de la DataGridView et ajoutez ce code (vb.net):
OriginalL'auteur swe
Tout simplement qu'il va travailler tout droit.
OriginalL'auteur Numan Kibria
Si vous avez besoin seulement de fermer le formulaire sur entrée, vous pouvez utiliser le code suivant. Je suppose que la grille est en lecture seule et vous n'avez pas besoin de distinquish la situation dans laquelle l'entrée a été pressée.
OriginalL'auteur Tomas Kubes