//功能是:我希望绘制的图像会随着窗体的大小变化而变化,并且铺满整个窗体。问题是我每次改变窗体大小时,原来绘制的图像还在,而且在上层。但是如果将
窗体最小化或是被其它窗体遮挡,再恢复后就是正常的。我原来想加一句dc.Clear(Color.Black );又会出现参数错误的提示,到底如何改呢?谢谢 代码是这样的:public partial class Form2 : Form
    {
        Image piccy;
        Point[] piccb;
        Graphics dc;
        public Form2()
        {
            InitializeComponent();
            piccy = Image.FromFile("..\\..\\1\\l.jpg");
            this.AutoScrollMinSize = piccy.Size;
            piccb = new Point[3];
            piccb[0]=new Point (0,0);
            piccb[1] = new Point(this.Width , 0);
            piccb[2] = new Point(0, this.Height );
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
             dc = e.Graphics;
            dc.ScaleTransform(1f,1f);
            dc.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
            dc.DrawImage(piccy, piccb);
        }        
        private void Form2_SizeChanged_1(object sender, EventArgs e)
        {
            //dc.Clear(Color.Black );
            piccb[0] = new Point(0, 0);
            piccb[1] = new Point(this.Width, 0);
            piccb[2] = new Point(0, this.Height);        }
        
    }

解决方案 »

  1.   


    public partial class Form2 : Form
    {
        Image piccy;     public Form2() 
        { 
            InitializeComponent(); 
            piccy = Image.FromFile("..\\..\\1\\l.jpg"); 
            this.DoubleBuffered = true;
            this.AutoSize = true;
            this.AutoScrollMinSize = piccy.Size;
        }     protected override void OnPaint(PaintEventArgs e) 
        {
            Graphics dc = e.Graphics;
            dc.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
            dc.DrawImage(piccy, this.ClientRectangle);                          //<--
        }    protected override void OnResize(EventArgs e)
        {
            base.OnResize(e);
            this.Invalidate();                                                  //<--
            this.Update();
        }
    几个建议,一是不要缓存Graphic对象,二是窗体(含边框,标题栏)比客户区大,用客户区大小比较合适。
      

  2.   

    SizeChange之后调用this.Invalidate();重绘一下
      

  3.   

    特别感谢gomoku的解答
    也谢谢tinghai_xu