如何使用 colordialog 控件更改 ListView 列 Header 的颜色

How can I change color of column Header for a ListView using colordialog control

我知道如何在运行前更改 header 列表视图的颜色。即,在我这样写的代码中:

private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
    e.Graphics.FillRectangle(Brushes.Pink, e.Bounds);
    e.DrawText();
}

由于无法将屏幕截图放在这里,所以我只是想在这里解释一下。在 WindowsForm 中,我放置了 ListView、ColorDialog 和 ContextMenuStrip。我为 ListView 添加了 Header。现在,当 运行 用户右键单击 ListView 和 select 颜色选项时,应用程序将打开 ColorDialog 框。当用户 Select 一种颜色并按下 Ok 按钮时,该颜色应该应用于 ListView 的 Header。这是我的要求。

我已经尝试过了,但没有得到任何相关的答案。所以我来到这里。任何答案将不胜感激。提前致谢。

更改我的代码后:

private void BackColor_Click(object sender, EventArgs e)
    {
         DialogResult res=colorDialog1.ShowDialog();
         if (res==DialogResult.OK)
         {
              hdr=colorDialog1.Color;
              listView1.Update();
         }
    }

并且我更改了我的 listView1_DrawColumnHeader 事件,我更改为:

        using (Brush hBr=new SolidBrush(hdr))
        {
            e.Graphics.FillRectangle(hBr, e.Bounds);
            e.DrawText();
        }

但问题是,更改给定颜色需要将近 2 分钟。你能帮我吗

假设您将用户想要的颜色保存到颜色变量中,这里命名为 hdrColor。使用它:

// form level var with a default:
Color hdrColor = SystemColors.Control;

private void _DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
    using (Brush hBr = new SolidBrush(hdrColor))
    {
        e.Graphics.FillRectangle(hBr, e.Bounds);
        e.DrawText();
    }
}

您不能 "pass" 在不破坏事件签名的情况下将其添加到事件中。因此,只需将颜色对话框中的 所需颜色 保存到 class 级别变量,从中创建一个画笔,然后在绘画事件中使用它。请注意,using 会在我们用完后处理刷子。