日期:2014-05-17  浏览次数:20916 次

Windows窗体应用程序中pictureBox的问题
代码很简单,picLoad是加载一张图,Draw是画个框。
如下,按钮1是加载,按钮2是画框,按钮3是先加载再画框。

先按button1 ,再按button2,正常运行。
如果只按Button3,却不会画出框来,只加载了图片。

请问怎么办???我不想分步啊。。。
(经过研究,按BUTTON3的时候,系统好像在加载图片之前先画了框了。。。这可如何是好)
(picLoad里现在用的是picBox.Image=xxx的方法。一样没用。。。和注释掉的load方法一样的情况)

C# code

        void PicLoad()
        {
            Image i = Image.FromFile(@"D:\temp.bmp");
            this.pictureBox1.Image = i;
            //this.pictureBox1.Load(@"D:\temp.bmp");
        }

        void Draw()
        {
            Graphics g = this.pictureBox1.CreateGraphics();
            g.DrawRectangle(new Pen(Color.Gold), 0, 0, 100, 100);
        }

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

        private void button2_Click(object sender, EventArgs e)
        {
            Draw();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            PicLoad();
            Draw();
        }



------解决方案--------------------
调用Image时,或导致窗体刷新,是不是在刷新过程中执行了画框的方法;

改成在Image上画框好了:
void Draw()
{
Graphics g = Graphics.FromImage(this.pictureBox1.Image);
g.DrawRectangle(new Pen(Color.Gold), 0, 0, 100, 100);
}
------解决方案--------------------
放PictrueBox的OnPaint事件中试试看。
------解决方案--------------------
最好在OnPaint中绘画,否则窗口一刷新,像最小化,再最大化,画的东西就没有了。