listview标题复选框

Ane*_*ees 4 c# listview

我有一个包含listview控件的窗体,其中listView1.View = View.Details;listView1.CheckBoxes = true;

然后添加一个HeaderName为"FileName"的列.

listView1.Columns.Add("File Name", 200, HorizontalAlignment.Left);
Run Code Online (Sandbox Code Playgroud)

在这里,我想在列表视图的标题中有复选框,即FileName.

谁能帮我这个.

提前致谢.安迪

Mat*_*kon 9

带复选框的ListView标头不是标准ListView功能的一部分.您需要自定义渲染以执行此操作:

    listview.OwnerDraw = true


    private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
    {
        // Draw your custom checkbox control here
    }

    private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
    {
        e.DrawDefault = true;
    }

    private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
    {
        e.DrawDefault = true;
    }
Run Code Online (Sandbox Code Playgroud)

您还必须为标题添加一些点击处理程序,并自行管理复选框的状态.


Jon*_*ien 6

这是我在C#中的答案,它也解释了Click事件以及VB.NET中的C#事件处理

private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) 
{
    if ((e.ColumnIndex == 0))
    {
        CheckBox cck = new CheckBox();
        // With...
        Text = "";
        Visible = true;
        listView1.SuspendLayout();
        e.DrawBackground();
        cck.BackColor = Color.Transparent;
        cck.UseVisualStyleBackColor = true;

        cck.SetBounds(e.Bounds.X, e.Bounds.Y, cck.GetPreferredSize(new Size(e.Bounds.Width, e.Bounds.Height)).Width, cck.GetPreferredSize(new Size(e.Bounds.Width, e.Bounds.Height)).Width);
        cck.Size = new Size((cck.GetPreferredSize(new Size((e.Bounds.Width - 1), e.Bounds.Height)).Width + 1), e.Bounds.Height);
        cck.Location = new Point(3, 0);
        listView1.Controls.Add(cck);
        cck.Show();
        cck.BringToFront();
        e.DrawText((TextFormatFlags.VerticalCenter | TextFormatFlags.Left));
        cck.Click += new EventHandler(Bink);
        listView1.ResumeLayout(true);
    }
    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 Bink(object sender, System.EventArgs e)
{
    CheckBox test = sender as CheckBox;

    for (int i=0;i < listView1.Items.Count; i++)
    {     
        listView1.Items[i].Checked = test.Checked;
    }
}
Run Code Online (Sandbox Code Playgroud)