如何将复选框添加到c#Winform应用程序中的列表视图列标题?

时间:2016-03-04 06:30:18

标签: c# winforms listview checkbox

enter image description here

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

enter image description here

我想用c#

中的复选框创建这种类型的listview标题

1 个答案:

答案 0 :(得分:10)

您可以将ListView的{​​{3}}属性设置为true,并在第一列标题上绘制ChceckBox并处理ColumnClick以执行select / deselect all。

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

  • 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();
    }
}

<强>截图:

OwnerDraw

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