Question

J'utilise un ListView en C # pour créer une grille. Je voudrais trouver un moyen de pouvoir mettre en évidence une cellule spécifique, par programme. Je n'ai besoin que de mettre en évidence une cellule.

J'ai expérimenté les sous-éléments Owner Drawn, mais en utilisant le code ci-dessous, les cellules sont en surbrillance, mais pas de texte! Y at-il des idées sur la façon de faire fonctionner cela? Merci pour votre aide.

//m_PC.Location is the X,Y coordinates of the highlighted cell.


void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
    if ((e.ItemIndex == m_PC.Location.Y) && (e.Item.SubItems.IndexOf(e.SubItem) == m_PC.Location.X))
        e.SubItem.BackColor = Color.Blue;
    else
        e.SubItem.BackColor = Color.White;
    e.DrawBackground();
    e.DrawText();
}
Était-ce utile?

La solution

Vous pouvez le faire sans que le propriétaire dessine la liste:

// create a new list item with a subitem that has white text on a blue background
ListViewItem lvi = new ListViewItem( "item text" );
lvi.UseItemStyleForSubItems = false;
lvi.SubItems.Add( new ListViewItem.ListViewSubItem( lvi,
    "subitem", Color.White, Color.Blue, lvi.Font ) );

Les arguments Color du constructeur ListViewSubItem contrôlent les couleurs de premier plan et d'arrière-plan du sous-élément. La chose critique à faire ici est de définir UseItemStyleForSubItems sur False sur l'élément de la liste, sinon vos modifications de couleur seront ignorées.

Je pense que votre solution de création par le propriétaire aurait également bien fonctionné, mais vous devez vous rappeler de changer la couleur du texte (au premier plan) lorsque vous modifiez l'arrière-plan en bleu, sinon le texte sera difficile à voir.

Autres conseils

Je l'ai compris. Voici le code pour activer la surbrillance d'un sous-élément spécifique.

listView1.Items[1].UseItemStyleForSubItems = false;
if (listView1.Items[1].SubItems[10].BackColor == Color.DarkBlue)
{
    listView1.Items[1].SubItems[10].BackColor = Color.White;
    listView1.Items[1].SubItems[10].ForeColor = Color.Black;
}
else
{
    listView1.Items[1].SubItems[10].BackColor = Color.DarkBlue;
    listView1.Items[1].SubItems[10].ForeColor = Color.White;
}

Dans mon cas, je souhaitais mettre en évidence des lignes spécifiques, y compris tous les champs. Ainsi, chaque ligne de ma liste apparaît avec " Medicare " dans la première colonne, la ligne entière est mise en surbrillance:

public void HighLightListViewRows(ListView xLst)
        {
            for (int i = 0; i < xLst.Items.Count; i++)
            {
                if (xLst.Items[i].SubItems[0].Text.ToString() == "Medicare")
                {
                    for (int x = 0; x < xLst.Items[i].SubItems.Count; x++)
                    {
                        xLst.Items[i].SubItems[x].BackColor = Color.Yellow;
                    }
                }
            }
        }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top