程序员的知识教程库

网站首页 > 教程分享 正文

datagridview的textbox列滚动后位置错误问题的解决

henian88 2024-08-16 17:26:34 教程分享 7 ℃ 0 评论

前面我们提到了如何添加自定义的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控件在父控件滚动时不会错位。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表