我有一个包含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.
谁能帮我这个.
提前致谢.安迪
带复选框的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)
您还必须为标题添加一些点击处理程序,并自行管理复选框的状态.
这是我在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)