如何在c#Winform App中向列表视图列标题添加复选框?
我想在标题中添加复选框,如果我选中了标题复选框,它应该像全选和全选一样。。。就像上面的图片 我想用c#中的复选框创建这种类型的listview标题。您可以将如何在c#Winform App中向列表视图列标题添加复选框?,c#,winforms,listview,checkbox,C#,Winforms,Listview,Checkbox,我想在标题中添加复选框,如果我选中了标题复选框,它应该像全选和全选一样。。。就像上面的图片 我想用c#中的复选框创建这种类型的listview标题。您可以将listview的属性设置为true,并在第一列标题上绘制ChceckBox,然后处理列单击执行全选/取消全选 要绘制列表视图,需要处理DrawColumnHeader、DrawItem和DrawSubItem事件 在DrawColumnHeader事件中绘制复选框 设置e.DrawDefault=true 处理column单击事件并将列
listview
的属性设置为true,并在第一列标题上绘制ChceckBox
,然后处理列单击执行全选/取消全选
- 要绘制
列表视图
,需要处理DrawColumnHeader
、DrawItem
和DrawSubItem
事件
- 在
DrawColumnHeader
事件中绘制复选框
- 设置
e.DrawDefault=true用于绘制默认渲染的其他图形事件的代码>
- 处理
column单击事件并将列标题的选中状态存储在列的标记中。同样对于列表视图的每个项目,设置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();
}
}
屏幕截图:
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();
}
}
- 在上图中,我有3列
- 我为第一列设置了空文本
- 我将
列表视图的复选框
属性设置为true
- 我为项目设置了空文本,并为每个项目添加了2个子项目
你看到了吗?@Robotnik看上面的图片,我想在列表视图标题中添加复选框。你可以将listview
的OwnerDraw
属性设置为true,并在第一列标题和句柄column上绘制一个ChceckBox
来执行全选/取消全选。@SantoshKokatnur你本可以给出一些提示在你的代码项目文章中感谢Reza Aghaei@Dom84已在codeproject中为Reza提供了信贷。看一看。