前面我们提到了如何添加自定义的textbox列,由于我们是用位置来添加的控件,这样就导致datagridview在滚动以后它们的位置就会出错,下面的代码可以解决这个问题
我添加的textbox的id形式为 "mytb_"+行索引,这个在前面的文件中是写过的
private void dataGridView1_Scroll(object sender, ScrollEventArgs e)
{
if (e.ScrollOrientation == ScrollOrientation.VerticalScroll)
{
for (int i = 0; i < rows; i++)
{
string textboxid = "mytb_" + i.ToString();
foreach (Control c in dataGridView1.Controls)
{
string cname = c.Name;
if (cname == textboxid)
{
c.Left = dataGridView1.GetCellDisplayRectangle(5, i, true).Left + 1;
c.Top = dataGridView1.GetCellDisplayRectangle(5, i, true).Top + 1;
c.Width = textboxW;
c.Height = textboxH;
}
}
}
//不知道为啥,循环时第一行的这个textbox就是不能整到指定位置
//所以只能在加载时记下来,判断滚动条到顶时手工整到指定位置
int nowlocation = dataGridView1.VerticalScrollingOffset;
if (nowlocation == 0)
{
string textboxid = "mytb_0";
foreach (Control c in dataGridView1.Controls)
{
string cname = c.Name;
if (cname == textboxid)
{
c.Left = firsttextboxleft;
c.Top = firsttextboxtop;
c.Width = textboxW;
c.Height = textboxH;
break;
}
}
}
}
}
用这种办法,就能保证添加的textbox控件在父控件滚动时不会错位。
本文暂时没有评论,来添加一个吧(●'◡'●)