Comment faire pour désélectionner toutes les lignes sélectionnées dans un contrôle DataGridView?
J'aimerais pour désélectionner toutes les lignes sélectionnées dans un DataGridView
de contrôle lorsque l'utilisateur clique sur un vide (hors ligne) de la télécommande.
Comment puis-je faire cela?
Vous devez vous connecter pour publier un commentaire.
Pour désélectionner toutes les lignes et les cellules dans un
DataGridView
, vous pouvez utiliser leClearSelection
méthode:Si vous ne voulez pas de même de la première ligne/cellule d'apparaître sélectionné, vous pouvez définir la
CurrentCell
de la propriété àNothing
/null
, qui permet de masquer temporairement le rectangle de focus jusqu'à ce que le contrôle reçoit le focus de nouveau:Pour déterminer si l'utilisateur a cliqué sur une partie vide de la
DataGridView
, vous allez avoir à gérer sesMouseUp
événement. Dans ce cas, vous pouvezHitTest
le clic et regarder pour cette pour indiquerHitTestInfo.Nulle part
. Par exemple:Bien sûr, vous pouvez également créer des sous-classes existantes
DataGridView
contrôle de combiner toutes ces fonctionnalités en un seul contrôle personnalisé. Vous aurez besoin afin de remplacer sonOnMouseUp
méthode similaire à la façon illustrée ci-dessus. J'aime aussi fournir uneDeselectAll
méthode pour des raisons de commodité que les deux appels de laClearSelection
méthode et définit laCurrentCell
propriétéNothing
.(Exemples de Code sont tous arbitrairement dans VB.NET parce que la question n'est pas de spécifier une langue—toutes mes excuses si ce n'est pas votre langue natale, le dialecte.)
=HitTestInfo.Nowhere
j'ai dû la changer.....If myDataGridView.HitTest(e.X, e.Y) Is myDataGridView.HitTest(e.X, e.Y) Then
... fonctionne comme prévu, mais pas à 100% sûr de savoir pourquoi cela fonctionne. Première HitTest code mis en œuvre.Is
opérateur compare les types de deux variables de référence. Donc tout ce que vous faites là est la vérification que leHitTest
propriété renvoie une valeur du même type que le...HitTest
de la propriété. C'est comme direIf True = True
.HitTest
propriété renvoie une valeur de typeHitTestInfo
.HitTestInfo
est un non-héritées de la classe qui contient, entre autres choses, un champ statique nomméNowhere
. C'est le champ que vous avez besoin de comparer. Je suppose que ce qui est le déclenchement de vous, c'est que leHitTestInfo
classe est un imbriquée de la classe deDataGridView
. J'ai mis à jour ma réponse explicitement la qualifier.If Blank Space Is Blank Space Then
.. là Où la version de cellules serait quelque chose commeIf Cell Space Is Cell Space Then
.. peut-être?.. je me demandais pourquoi le mien fonctionne avec unTrue = True
situation ? Si je clique sur une Cellule de la mettre en évidence les séjours, si je clique sur un espace vide, il s'en va.Grâce Cody heres le c# pour ref:
Ensemble
lorsque l'utilisateur clique sur une partie vide de la dgv.
j'ai trouvé pourquoi ma première ligne a été sélectionnée par défaut et trouvé comment ne pas le sélectionner par défaut.
Par défaut de mon datagridview a été l'objet avec le premier onglet-stop sur mon formulaire windows. Faire de l'onglet arrêtez-vous d'abord sur un autre objet (peut-être la désactivation de tabulation pour le contrôle datagrid à tous les travaux d') désactivée en sélectionnant la première ligne
TabStop
propriétéfalse
semble charger le formulaire sans sélectionnésDataGridView
cellule/index.j'ai couru dans le même problème et trouvé une solution (qui n'est pas totalement par moi-même, mais il y a internet pour)
C'est un petit truc, la seule façon vous pouvez voir une ligne est sélectionnée, par la première colonne (pas de colonne[0], mais la seule donc). Lorsque vous cliquez sur une autre ligne, vous ne pourrez pas voir le bleu de la sélection de la plus, seule la flèche indique la ligne sélectionnée. Comme vous le comprenez, j'utilise rowSelection dans mon gridview.
Dans VB.net utilisation pour le Sub: