如何使用 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
会在我们用完后处理刷子。
我知道如何在运行前更改 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
会在我们用完后处理刷子。