C#ListView Detail、単一セルを強調表示
-
03-07-2019 - |
質問
C#でListViewを使用してグリッドを作成しています。特定のセルをプログラムで強調表示する方法を見つけたいです。 1つのセルを強調表示するだけです。
所有者描画サブアイテムを試しましたが、以下のコードを使用すると、強調表示されたセルが表示されますが、テキストは表示されません!これを機能させる方法についてのアイデアはありますか?ご協力ありがとうございます。
//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();
}
解決
所有者がリストを描画せずにこれを行うことができます:
// 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に設定することです。そうしないと、色の変更は無視されます。
所有者描画ソリューションも同様に機能すると思いますが、背景を青に変更するときはテキスト(前景)の色を変更することを忘れないでください。そうしないと、テキストが見えにくくなります。
他のヒント
それを理解しました。特定のサブアイテムのハイライトを切り替えるコードは次のとおりです。
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;
}
私の場合、すべてのフィールドを含む特定の行を強調表示したかった。リストビューの「メディケア」を含むすべての行は、最初の列では、行全体が強調表示されます。
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;
}
}
}
}
所属していません StackOverflow