注册 登录
编程论坛 C# 论坛

MDI 窗口在打开一个子窗口同时关闭已经打开的子窗口时,子窗口上 datagridview 中的列标题刷新的问题

aqx 发布于 2014-08-06 12:53, 1887 次点击
在MDI窗口中打开一个带有datagridview控件的子窗口,同时关闭另一个已经打开的带有datagridview控件的子窗口时出现datagridview中的列标题中含有已关闭子窗口中datagridview的列标题,如下图,请教如何解决
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
11 回复
#2
aqx2014-08-06 12:57
补充说明一下:使用的VS版本为VS2010旗舰中文版,datagridview在窗口load事件中绑定数据源。
#3
aqx2014-08-06 13:03
打开一个子窗口,同时关闭已打开子窗口的代码如下
        private consumer f_consumer;
        private void ConsumerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (this.MdiChildren.Length > 0)
                this.MdiChildren[0].Close();
            if (f_consumer == null || f_consumer.IsDisposed)
            {
                f_consumer = new consumer();
                f_consumer.MdiParent = this;
                f_consumer.Location = new Point(0, 0);
                f_consumer.Width = f_consumer.Parent.ClientSize.Width;
                f_consumer.Height = f_consumer.Parent.ClientSize.Height;               
                f_consumer.Show();
                f_consumer.Activate();
            }
            else
            {
                f_consumer.Focus();
            }
        }
#4
aqx2014-08-06 13:15
补充:在有VS2010的环境中调试没有出现此问题,在没有VS2010的电脑上安装后发现此问题。
#5
xydddaxia2014-08-06 14:08
这个控件有没有重写过,或是被皮肤控件控制过
#6
aqx2014-08-06 15:10
回复 5 楼 xydddaxia
xydddaxia,你好
没有用皮肤控件,此控件也没有被重写.
#7
aqx2014-08-06 15:13
回复 5 楼 xydddaxia
运行软件后,在MDI中第1次打开一个子窗口显示是正常的,再打开别的子窗口就不正常了。不正常的时候,最小化此子窗口,然后最大化,显示就又正常了。
#8
xydddaxia2014-08-07 09:20
this.dataGridView1.Refresh();
this.dataGridView1.Invalidate();
刷新控件试试
#9
邓士林2014-08-08 22:43
你调试下看看datagridview有没有数据
#10
aqx2014-08-09 10:06
回复 9 楼 邓士林
在窗口关闭的时候加上if(dataGridView1.IsDisposed==false)
                       dataGridView1.Dispose();
问题就解决了。
但对于列数比较多的datagridview,在滚动水平滚动条时,有 部分列标题乱了,这个问题还没有解决。
#11
aqx2014-08-09 10:08
回复 9 楼 邓士林
datagridview中的记录正常,只是列标题出问题
#12
aqx2014-08-09 10:09
回复 8 楼 xydddaxia
试过这2条语句,不起作用。
1