Frage

Ich bin mit einem Listview in C #, um ein Raster zu machen. Ich mag einen Weg finden, um die Lage, eine bestimmte Zelle zu markieren, programmatisch. Ich brauche nur eine Zelle zu markieren.

Ich habe mit Besitzer Gezeichnet Subitems experimentiert, aber den Code unten verwenden, I-Zellen erhalten hervorgehoben, aber kein Text! Gibt es irgendwelche Ideen, wie diese Arbeit zu bekommen? Vielen Dank für Ihre Hilfe.

//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();
}
War es hilfreich?

Lösung

Sie können dies tun, ohne inhaber Zeichnung der 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 ) );

Die Farbe Argumente an den Konstruktor ListViewSubItem steuern die Vorder- und Hintergrundfarbe des subitem. Die kritische Sache hier zu tun gesetzt UseItemStyleForSubItems auf False auf dem Listeneintrag, sonst wird Ihre Farbänderungen werden ignoriert.

Ich denke, Ihre Besitzer-Lösung auch funktioniert hätte, aber man muss bedenken, die Text (im Vordergrund), Farbe zu ändern, wenn Sie den Hintergrund zu blau ändern, sonst wird der Text schwer zu sehen.

Andere Tipps

es herausgefunden. Hier ist Code, um das Highlight eines bestimmten subitem zu wechseln.

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;
}

In meinem Fall wollte ich bestimmte Zeilen markieren, einschließlich aller Felder aus. So jede Zeile in meinem Listview mit „Medicare“ in der ersten Spalte wird die gesamte Zeile markiert:

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;
                    }
                }
            }
        }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top