ListViewItem.ForeColor更改没有';t显示
本文关键字:显示 ForeColor ListViewItem | 更新日期: 2023-09-27 18:29:14
编辑:我是一个假人
所以。。。事实证明,问题出在以下几行;
item.UseItemStyleForSubItems = false;
我从另一段代码中复制了这一行,当时我正试图更改一个SubItem
,然后我改变了主意,决定在这里更改整行。我的listView
有几个隐藏列,当UseItemStyleForSubItems
设置为false
时,它只更改第一个SubItem
。因此,这种变化可能一直都在发生,只是没有发生在整排。
以下是grayOut
现在的样子:
internal static void grayOut(ref ListView myLV)
{
//change each selected item to gray text
//currently, multiselect is turned off, so this will only be one item at a time
foreach (ListViewItem item in myLV.SelectedItems)
{
item.Selected = false;
item.ForeColor = Color.Gray;
item.BackColor = Color.Gainsboro;
item.Font = new Font("MS Sans Serif", 8, FontStyle.Italic);
}
}
这和我想的一样简单
原始问题
我正在使用以下代码更改已执行选定操作的项目的ForeColor
。
public partial claass MyForm: Form
private void bgProgress_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Global.grayOut(ref this.lvUsers);
}
...
public static class Global
internal static void grayOut(ref ListView myLV)
{
//change each selected item to gray text
//currently, multiselect is turned off, so this will only be one item at a time
foreach (ListViewItem item in myLV.SelectedItems)
{
item.UseItemStyleForSubItems = false;
item.ForeColor = Color.Gray;
item.Font = new Font("MS Sans Serif", 10, FontStyle.Italic);
item.Selected = false;
}
myLV.Refresh();
}
我有两个问题。
- 属性发生了更改,但该更改不会显示。换句话说,我知道
ForeColor
变为灰色,因为稍后当用户尝试执行某个操作时,我会检查它是否为灰色。但是,它不会显示为灰色或斜体 我还使用以下内容来尝试取消
MouseDown
事件,以防止再次选择该项目,但它最终仍被选中:private void lvUsers_MouseDown(object sender, MouseEventArgs e) { // Make sure it was a single left click, like the normal Click event if (e.Button == MouseButtons.Left) { ListViewHitTestInfo htInfo = lvUsers.HitTest(e.X, e.Y); if (htInfo.Item.ForeColor == Color.Gray) { return; } } }
我还没有找到任何其他方法来取消MouseDown
事件,所以我不确定还能尝试什么。
您可以通过依赖与SelectedIndexChanged Event
关联的方法来获得您想要的东西。样本代码:
private void myLV_SelectedIndexChanged(object sender, EventArgs e)
{
if (myLV.SelectedItems.Count > 0)
{
foreach (ListViewItem item in myLV.SelectedItems)
{
if (item.ForeColor == Color.Gray)
{
item.Selected = false;
}
else
{
ListViewItem tempItem = item;
grayOut2(ref tempItem);
}
}
}
}
此代码会使您选择的任何项目变灰(如果以前未选择);否则,它将避免选择它。GrayOut2
是只考虑给定项目的函数版本。
internal static void grayOut2(ref ListViewItem item)
{
//change each selected item to gray text
//currently, multiselect is turned off, so this will only be one item at a time
item.UseItemStyleForSubItems = false;
item.ForeColor = Color.Gray;
item.Font = new Font("MS Sans Serif", 10, FontStyle.Italic);
item.Selected = false;
}