【发布时间】:2021-11-28 02:31:07
【问题描述】:
我有一个包含多列的 datagridview,并且我在其中一个列标题中创建了一个自定义复选框。由于我想在滚动条时修复列中的复选框标题,所以我创建了“滚动”事件来处理它。
private void dataGridView1_Scroll(object sender, ScrollEventArgs e)
{
if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll)
{
chbx.Location = new Point(chbx.Location.X - (e.NewValue - e.OldValue), chbx.Location.Y);
}
if (chbx.Location.X < dataGridView1.Location.X)
{
chbx.Visible = false;
}
else
{
chbx.Visible = true;
}
}
它的作品(图1)。但是,当我单击刷新按钮(gridview 中的数据刷新)并再次滚动条时,出现以下问题(图 2)。
private void btnRefresh_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = null;
SetupDGV();
}
private void SetupDGV()
{
///.....
chbx = new CheckBox();
Point headerCellLocation = dataGridView1.GetCellDisplayRectangle(0, -1, true).Location;
chbx.Name = "enableCHBX";
chbx.Location = new Point(headerCellLocation.X + 60, headerCellLocation.Y + 8);
chbx.BackColor = Color.White;
chbx.Size = new Size(15, 15);
// Assign Click event to the Header CheckBox.
cbx.Click += new EventHandler(chbxEnable_Click);
dataGridView1.Controls.Add(chbx);
}
对此有何建议?
【问题讨论】:
-
列数改变还是网格宽度改变?它是否创建了一个重复的复选框,因为您没有擦除
dataGridView1.Controls集合并删除您创建的chkbx?
标签: c# winforms user-interface