为什么使用DrawImage()函数,最小化或是图片拖动到桌面下方,Form上面的图片没有了呢,且再也不出现?

//最初的代码,最小化,form上的图片没有了。

private void button1_Click(object sender, EventArgs e)

        {
            InitializePlane(panel1);
            Graphics gfx = panel1.CreateGraphics();
            Image img = new Bitmap(@"F:"E_Map"TestProj"Images"yahoo.gif");
            Image img2 = new Bitmap(@"F:"E_Map"TestProj"Images"qq.gif");
            gfx.DrawImage(img, 0, 0);
            gfx.DrawImage(img2, 50, 50);
            gfx.Dispose();         

        }

分析原因:在一个线程中要保持不停的刷屏才会不断的现实,最小化后图片不会再显示,因为只画了一次,当你最小化再打开的时候需要重画才能显示。

解决方案:应该在paint事件中绘制,这样最小化后再还原时,会重新绘制。

//修改中的代码

  public Form1()
        {
            InitializeComponent();
            panel1.Paint += new PaintEventHandler(displayer_Paint);
            //panel1.Invalidate(); //去掉注释就可以了
        }

        private void button1_Click(object sender, EventArgs e)
        {
            InitializePlane(panel1);
        }

        private void InitializePlane(Control displayer)
        {  
        }

        void displayer_Paint(object sender, PaintEventArgs e)
        {
            Image img = new Bitmap(@"F:"E_Map"TestProj"Images"yahoo.gif");
            Image img2 = new Bitmap(@"F:"E_Map"TestProj"Images"qq.gif");
            e.Graphics.DrawImage(img, 0, 0);
            e.Graphics.DrawImage(img2, 50, 50);         

        }

 现在的问题是:除了第一次不画图,其它都会画图,最小化都不会消失。

解决问题方法:采用 panel1.Invalidate()方法,该方法作用:使整个图面失效且马上重新绘制图片。所以,当第一次click出现的图片应该是第二次绘制的。



posted @ 2009-03-11 17:39  做你所想  阅读(365)  评论(0编辑  收藏  举报