简体   繁体   中英

How to Add a Checkbox to a List View Column Header in c# Winform App?

在此输入图像描述

I want to add checkbox in header and also if I checked in header checkbox it should be like select all and deselect All... just like above image!

在此输入图像描述

I want to create this type of listview header with checkbox in c#

You can set OwnerDraw property of ListView to true and draw a ChceckBox on first column header and handle ColumnClick to perform select/deselect all.

  • For drawing the ListView you need to handle DrawColumnHeader , DrawItem and DrawSubItem events.

  • Draw checkbox in DrawColumnHeader event.

  • Set e.DrawDefault = true; for other drawing events to draw default rendering.
  • Handle ColumnClick event and store the checked state of column header in tag of column. Also for each item of list view, set Checked property to perform select/deselect all.

Code:

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

Screenshot:

在此输入图像描述

  • In the above image I have 3 columns.
  • I set empty text for first column.
  • I Set CheckBoxes property of ListView to true.
  • I Set empty text for items and added 2 sub items for each item.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM