日期:2014-05-19  浏览次数:20734 次

拖动滚动条后图像不对了
写了段代码单击窗体后画一个矩形和一个圆窗体的AutoScrollMinSize为(400,400)主要代码如下:
his.AutoScroll   =   true;
this.AutoScrollMinSize   =   new   System.Drawing.Size(400,   400);
private   void   Form1_Click(object   sender,EventArgs   e)
                {
                        Graphics   g1   =   this.CreateGraphics();
                        g1.DrawRectangle(pen,   0,   0,   200,   200);
                        g1.DrawEllipse(pen,   200,   200,   200,   200);
                }
为什么拖动滚动条后,图像就变得乱了,但是缩小放大后图像没有变化,怎么会这样呢?请高手解释问题产生的原因,该如何解决问题,谢谢。

------解决方案--------------------
g1.DrawRectangle(Pens.Red, AutoScrollPosition.X, AutoScrollPosition.Y, 200 + AutoScrollPosition.X, 200 + AutoScrollPosition.Y);
g1.DrawEllipse(Pens.Red, AutoScrollPosition.X + 200, AutoScrollPosition.Y + 200, 200, 200);
再加上 private void Form1_Scroll(object sender, ScrollEventArgs e)
{
Invalidate(ClientRectangle);
}

这是因为你点滚动条后 客户区还是原来的客户区 (0,0)仍为于你所看到的左上角 而不会运动到屏幕外
------解决方案--------------------
1:没有必要在Form1_Scroll事件里使用Invalidate(ClientRectangle);

2:你可以对控件在构造函数里如下设置:
this.SetStyle(ControlStyles.ResizeRedraw, true);