【问题标题】:How to Add a Checkbox to a List View Column Header in c# Winform App?如何在 c# Winform App 中的列表视图列标题中添加复选框?
【发布时间】:2016-03-04 06:30:17
【问题描述】:

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

我想在 c# 中用复选框创建这种类型的列表视图标题

【问题讨论】:

  • 你看过这个question 吗?
  • @Robotnik 看看上面的图片我想在列表视图标题中添加复选框
  • 您可以将ListViewOwnerDraw属性设置为true并在第一列标题上绘制ChceckBox并处理ColumnClick以执行全选/取消全选。

标签: c# winforms listview checkbox


【解决方案1】:

您可以将ListViewOwnerDraw 属性设置为true,并在第一列标题上绘制ChceckBox 并处理ColumnClick 以执行全选/取消全选。

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

  • DrawColumnHeader 事件中绘制复选框。

  • 为其他绘图事件设置e.DrawDefault = true;以绘制默认渲染。
  • 处理ColumnClick 事件并将列标题的选中状态存储在列标记中。同样对于列表视图的每个项目,设置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();
    }
}

截图:

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

【讨论】:

  • @SantoshKokatnur 你本可以在你的代码项目文章中给 Reza Aghaei 一些功劳...codeproject.com/Tips/1083589/…
  • @Dom84 在代码项目中感谢 Reza。看看吧。
猜你喜欢
  • 2011-11-15
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
相关资源
最近更新 更多