Comment désactiver la surbrillance de cellule dans une vue de données, La mise en surbrillance ne devrait pas se produire même si je clique sur la cellule.Désactiver la surbrillance de cellule dans un datagridview
Toutes les pensées Veuillez
Comment désactiver la surbrillance de cellule dans une vue de données, La mise en surbrillance ne devrait pas se produire même si je clique sur la cellule.Désactiver la surbrillance de cellule dans un datagridview
Toutes les pensées Veuillez
La seule façon que j'ai trouvé à mettre en évidence « désactiver » est de définir le SelectionBackColor
et le SelectionForeColor
dans le DefaultCellStyle
au même niveau que la BackColor
et ForeColor
, respectivement. Vous pouvez probablement le faire par programme sur l'événement Load
du formulaire, mais je l'ai également fait dans le concepteur.
Quelque chose comme ceci:
Me.DataGridView1.DefaultCellStyle.SelectionBackColor = Me.DataGridView1.DefaultCellStyle.BackColor
Me.DataGridView1.DefaultCellStyle.SelectionForeColor = Me.DataGridView1.DefaultCellStyle.ForeColor
Le ForeColor/BackColor bidouille ne fonctionnait pas pour moi, parce que j'avais des cellules de couleurs différentes. Donc, pour quelqu'un au même endroit, j'ai trouvé une solution plus proche de la désactivation de la capacité.
Définir l'événement SelectionChanged
appeler une méthode qui fonctionne ClearSelection
private void datagridview_SelectionChanged(object sender, EventArgs e)
{
this.datagridview.ClearSelection();
}
La question est [tag: vb.net] – Lankymart
Modifications minuscules nécessaires pour vb.net mais cela fonctionne bien. Je vous remercie. Je ne comprends pas pourquoi il n'y a pas une simple propriété à activer ou désactiver sur le contrôle. –
Je suppose que "ClearSelection()" déclenche à nouveau l'événement "SelectionChanged". ..... mais ce n'est pas le cas. Étrange. – boboes
Est-ce un websearch rapide pour savoir comment faire une sélection de datagridview non sélectionnable & a cette (page web) hit. L'appel de ClearSelection sur SelectionChanged peut provoquer et provoque un double déclenchement de l'événement SelectionChanged, au minimum.
Le premier événement est lorsque la cellule/ligne est sélectionnée et, bien sûr, l'événement SelectionChanged est déclenché. Le second tir est quand ClearSelection est appelé car il provoque (et donc logiquement!) La sélection du dataagridview à (de nouveau) changé (à aucune sélection), déclenchant ainsi SelectionChanged.
Si vous avez plus de code que simplement ClearSelection, en tant que tel, vous voudrez supprimer cet événement jusqu'à ce que votre code soit terminé. Voici un exemple:
private void dgvMyControl_SelectionChanged(object sender, EventArgs e)
{
//suppresss the SelectionChanged event
this.dgvMyControl.SelectionChanged -= dgvMyControl_SelectionChanged;
//grab the selectedIndex, if needed, for use in your custom code
// do your custom code here
// finally, clear the selection & resume (reenable) the SelectionChanged event
this.dgvMyControl.ClearSelection();
this.dgvMyControl.SelectionChanged += dgvMyControl_SelectionChanged;
}
La meilleure façon de le faire pour traiter les cellules avec des couleurs différentes, sans avoir besoin de refire des événements, serait de faire quelque chose comme ceci:
private void dgvMyControl_SelectionChanged(object sender, EventArgs e)
{
dgvMyControl.SelectedCells(0).Style.DefaultCellStyle.SelectionBackColor = dgvMyControl.SelectedCells(0).Style.DefaultCellStyle.BackColor
}
(EDIT)
en fait, cela doit être fait à temps pour la population de données. il ne semble pas fonctionner dans la méthode modifiée de sélection. Ainsi, après avoir rempli les données dans la table, vous devez parcourir les cellules et modifier leur arrière-plan sélectionné pour correspondre à leur arrière-plan normal.Quelque chose comme cela (la syntaxe peut être un peu loin, je le convertir de mon code vb):
foreach (datarow r in dgv.rows)
{
foreach (datacell c in r.cells)
{
c.Style.SelectionBackColor = c.Style.BackColor
}
}
Déranger et cela fonctionne aussi, comme je veux seulement changer la couleur de fond de la cellule dans la 2ème colonne lorsqu'une cellule est cliqué:
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
Dim row As Integer = DataGridView1.CurrentCellAddress.Y
Dim column As Integer = DataGridView1.CurrentCellAddress.X
If column = 1 Then
Me.DataGridView1.CurrentCell.Selected = False
DataGridView1.Item(column, row).Style.BackColor = SelectColour()
End If
End Sub
Private Sub DataGridView1_SelectionChanged(sender As Object, e As System.EventArgs) Handles DataGridView1.SelectionChanged
Me.DataGridView1.ClearSelection()
End Sub
Voilà. Mais si vous voulez toujours obtenir cliqué index de ligne/cellule ou aux valeurs d'accès:
Private Sub DataGridView1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
Dim _ht As DataGridView.HitTestInfo = Me.DataGridView1.HitTest(e.X, e.Y)
If _ht.Type = DataGridViewHitTestType.Cell Then
Me.DataGridView1.Rows(_ht.RowIndex).Cells(_ht.ColumnIndex).Value = _
"RowIndex = " & _ht.RowIndex & ", " & "ColumnIndex = " & _ht.ColumnIndex
End If
End Sub
en parler vb:
Private Sub datagridview1_SelectionChanged(sender As Object, e As EventArgs) Handles datagridview1.SelectionChanged
datagridview1.ClearSelection()
End Sub
Cela ne fonctionne pas si certaines cellules sont en différentes couleurs, puis par défaut backcolor . – Jovica
Si vous faites défiler les lignes en définissant les couleurs, vous pouvez également définir les couleurs de sélection dans la même boucle. Ensuite, cela fonctionne très bien. Plus généralement, vous pouvez définir les couleurs de sélection à chaque fois que vous définissez les couleurs normales. – clweeks