gpt4 book ai didi

c# - ListViewItem.ForeColor 更改不显示

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:39 24 4
gpt4 key购买 nike

编辑:我是个傻瓜

所以……原来问题出在下面这行;

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

我有两个问题。

  1. 属性发生变化,但不会显示该变化。换句话说,我知道 ForeColor 已更改为灰色,因为稍后我会在用户尝试执行特定操作时检查它是否为灰色。但是,它不会显示为灰色或斜体。
  2. 我还使用以下方法尝试取消 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 事件 关联的方法来获得您想要的结果。示例代码:

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

关于c# - ListViewItem.ForeColor 更改不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18467265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com