答案 0 :(得分:10)
您可以将ListView
的{{3}}属性设置为true,并在第一列标题上绘制ChceckBox
并处理ColumnClick
以执行select / deselect all。
要绘制ListView
,您需要处理DrawColumnHeader
,DrawItem
和DrawSubItem
个事件。
在DrawColumnHeader
事件中绘制复选框。
e.DrawDefault = true;
以绘制默认渲染。ColumnClick
事件并将列标题的已检查状态存储在列标记中。同样对于列表视图的每个项目,设置Checked
属性以执行select / deselect all。<强>代码:强>
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();
}
}
<强>截图:强>
CheckBoxes
的{{1}}属性设置为true。