C#子窗体打开的图片显示在主窗体的PictureBox中

第1步,创建项目。在Form1窗体增加一个按钮,打开Form2窗体使用。(第4步是重点)

 private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.Show();
        }

第2步,在Form2窗体增加一个按钮,打开图片使用。担心图片打开有没有问题,在Form2窗体增加一个PictureBox显示一下你打开的图片即可(代码如下)。

private void button1_Click(object sender, EventArgs e)
        {
            //Bitmap是直接打开图片使用的,很方便。    
            string imagePath = "C:\\Users\\Administrator\\Desktop\\image_01.png";
            Bitmap bitmap = new Bitmap(imagePath);
            //验证显示图片,可以正常显示
            bitmap.Size = pictureBox1.Size;
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            pictureBox1.Image = bitmap;
        }

第3步,别急着想其它方法,先理清思路。(看代码说明)

        
private void button1_Click(object sender, EventArgs e)
        {
            string imagePath = "C:\\Users\\Administrator\\Desktop\\image_01.png";
            Bitmap bitmap = new Bitmap(imagePath);
            //这里是增加picturebox验证图片打开成不成功,不成功检查一下路径imagePath 。
            bitmap.Size = pictureBox1.Size;
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            pictureBox1.Image = bitmap;
            //以上代码验证完了,注释或删除掉。

            //这里按照正常思路,我们会直接去关联主窗体Form1的picturebox上。
            Form1 form1 = new Form1();
            //下一句是Form1设置picturebox的代码,需要设置为public才能这样调用。
            //(Form1)public System.Windows.Forms.PictureBox pictureBox1;
            form1.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            form1.pictureBox1.Image = bitmap;
            //写到上面应该是写完了,但是点击按钮并没有在Form1看到图片。
            //这时我们就会想,应该是没有刷新造成的。那按照下面的再显示一下,果然可以看到图片。
            //这时说明思路是对的。
            form1.Show();
        }

第4步,当走到第3步的时候,对于一个初学者来说,思路是对的,只是图片没有刷新而已。现在重点考虑的问题是怎么不重复打开Form1才能正常显示呢?从C#基础知识库里面,我们是不是有一种叫委托传值的技能,这个时候就可以很好的用在这里了。看以下代码,区别Form1(主)和Form2(子)

//【4.1】首先要创建委托。哪里传值就哪里创建,Form2传给Form1,那就在Form2里创建。
//委托是一种(方法)类,可以在命名空间下直接创建,也可以在Form2类创建。
//要把图片信息传出去,那委托类的参数就是图片类参数。
        //第1行是Form2类下创建的委托,第2行是Form2类下创建的委托变量。
        public delegate void DelegetShowImage(Bitmap _bitmap);
        public DelegetShowImage delegetShowImage;
//【4.2】委托类和对象都完成了,是不是要实现这个委托呢。我们的目的是要在Form1上显示图片,
//那肯定是在Form1上完成方法的定义了。
        //以下是Form1显示图片的方法。
        private void delegateShowPictrueBox(Bitmap _bitmap)
        {
            //设置填充属性
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            //显示图片
            pictureBox1.Image = _bitmap;
        }
//【4.3】委托变量好了,想要实现的方法也好了,就差关联变量和方法了。
//这个时候是在哪个窗体设置,自己可以想一下。为什么会在form2创建的时候就设置好。
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            //以下这一行代码就是关联变量和方法。
            form2.delegetShowImage = new Form2.DelegetShowImage(delegateShowPictrueBox);
            form2.Show();
        }
//【4.4】全部设置好了,那就是什么时候使用了。点击按钮时使用,那就直接在按钮里调用就好。
        private void button1_Click(object sender, EventArgs e)
        {
            string imagePath = "C:\\Users\\Administrator\\Desktop\\image_01.png";
            Bitmap bitmap = new Bitmap(imagePath);
            delegetShowImage(bitmap);
            //这里是增加picturebox验证图片打开成不成功,不成功检查一下路径imagePath 。
            //bitmap.Size = pictureBox1.Size;
            //pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            //pictureBox1.Image = bitmap;
            //以上代码验证完了,注释或删除掉。

            //这里按照正常思路,我们会直接去关联主窗体Form1的picturebox上。
            //Form1 form1 = new Form1();
            //下一句是Form1设置picturebox的代码,需要设置为public才能这样调用。
            //(Form1)public System.Windows.Forms.PictureBox pictureBox1;
            //form1.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            //form1.pictureBox1.Image = bitmap;
            //写到上面应该是写完了,但是点击按钮并没有在Form1看到图片。
            //这时我们就会想,应该是没有刷新造成的。那按照下面的再显示一下,果然可以看到图片。
            //这时说明思路是对的。
            //form1.Show();
        }

以上是我在使用的时候的思路。抄代码很简单,思路很重要。先自己按照很简单的思路去写,写出来结果不对再解决,这样就找到了感觉。这个流程下来,个人对委托和回调的认识加深很多,其实这样使用也是一种回调。

大家有更好的思路麻烦留言讨论,相互探讨。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值