10

C# で ListView を使用してグリッドを作成しています。プログラムで特定のセルを強調表示できる方法を見つけたいと思います。1 つのセルのみを強調表示する必要があります。

Owner Drawn サブアイテムを試してみましたが、以下のコードを使用すると、強調表示されたセルが表示されますが、テキストは表示されません! これを機能させる方法についてのアイデアはありますか? ご協力いただきありがとうございます。

//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();
}
4

3 に答える 3

14

これは、所有者がリストを描画しなくても実行できます。

// 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 ) );

ListViewSubItemコンストラクターのColor引数は、サブアイテムの前景色と背景色を制御しています。ここで行う重要なことはUseItemStyleForSubItems、リスト項目でFalseに設定されています。そうしないと、色の変更が無視されます。

オーナー描画ソリューションも機能したと思いますが、背景を青に変更するときは、テキスト(前景色)の色を変更することを忘れないでください。そうしないと、テキストが見づらくなります。

于 2008-10-18T16:51:57.107 に答える
2

理解した。特定のサブアイテムの強調表示を切り替えるコードを次に示します。

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;
}
于 2008-10-18T18:53:41.700 に答える
1

私の場合、すべてのフィールドを含む特定の行を強調表示したかったのです。したがって、最初の列に「Medicare」があるリストビューのすべての行が、行全体が強調表示されます。

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;
                    }
                }
            }
        }
于 2012-10-22T22:21:27.563 に答える