gpt4 book ai didi

c# - 如何在 C# Winform 应用程序中将复选框添加到 ListView 列标题?

转载 作者:行者123 更新时间:2023-11-30 13:30:24 24 4
gpt4 key购买 nike

enter image description here

我想在标题中添加复选框,如果我在标题复选框中选中,它应该像全选和取消全选...就像上图一样!

enter image description here

我想在 C# 中使用复选框创建这种类型的 ListView 标题

最佳答案

你可以设置OwnerDraw ListView 的属性设置为 true 并在第一列标题上绘制一个 ChceckBox 并处理 ColumnClick 以执行全选/取消全选。

  • 要绘制 ListView,您需要处理 DrawColumnHeaderDrawItemDrawSubItem 事件。

  • DrawColumnHeader 事件中绘制复选框。

  • 为其他绘制事件设置e.DrawDefault = true;绘制默认渲染。
  • 处理ColumnClick 事件并将列标题的选中状态存储在列的标记中。此外,对于 ListView 的每个项目,设置 Checked 属性以执行全选/取消全选。

代码:

private void listView1_DrawColumnHeader(object sender, 
DrawListViewColumnHeaderEventArgs e)
{
if (e.ColumnIndex == 0)
{
e.DrawBackground();
bool value = false;
try
{
value = Convert.ToBoolean(e.Header.Tag);
}
catch (Exception)
{
}
CheckBoxRenderer.DrawCheckBox(e.Graphics,
new Point(e.Bounds.Left + 4, e.Bounds.Top + 4),
value ? System.Windows.Forms.VisualStyles.CheckBoxState.CheckedNormal :
System.Windows.Forms.VisualStyles.CheckBoxState.UncheckedNormal);
}
else
{
e.DrawDefault = true;
}
}

private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
e.DrawDefault = true;
}

private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
e.DrawDefault = true;
}

private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
{
if (e.Column == 0)
{
bool value = false;
try
{
value = Convert.ToBoolean(this.listView1.Columns[e.Column].Tag);
}
catch (Exception)
{
}
this.listView1.Columns[e.Column].Tag = !value;
foreach (ListViewItem item in this.listView1.Items)
item.Checked = !value;

this.listView1.Invalidate();
}
}

截图:

enter image description here

  • 在上图中我有 3 列。
  • 我为第一列设置了空文本。
  • 我将 ListViewCheckBoxes 属性设置为 true。
  • 我为项目设置了空文本,并为每个项目添加了 2 个子项目。

关于c# - 如何在 C# Winform 应用程序中将复选框添加到 ListView 列标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35789438/

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