private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
          
                        PictureBox[] pic=new PictureBox[2];
            for (int i = 0; i < 2; i++)
            { pic[i] = new PictureBox();
           
            pic[i].Height =100;
            pic[i].Width = 100;
            pic[i].SizeMode = PictureBoxSizeMode.StretchImage;
          
            pic[i].Location = new Point(30, 130*i);
            
            pic[i].Image = Image.FromFile(openFileDialog1.FileName);
            
            this.Controls.Add(pic[i]);
           
           }
为什么这个代码第一次打开一个jpg可以顺序加载到pictureboxz中,第二次打开另外一个jpg就显示不出来,picturebox还是显示第一次加载的图片,没有刷新?

解决方案 »

  1.   

    为什么要创建一大堆picturebox呢,一个picturebox显示n张图片多好,你这样不得慢死啊
      

  2.   

    我是测试,以后加载的是从数据库取出的图片,图片数量不固定,只能动态定义,然后依次加载到这些picturebox中
      

  3.   

    数量不固定也可以加入一个picturebox里啊,估计是第一个picturebox把第二个覆盖了,错开一点看看
      

  4.   

    sswwee:
    可能你还是没有看懂我写的代码
      

  5.   

    你加了多个的Picturebox,而这些Picturebox控件有一个排列顺序,也就是总是显示最顶的那张,你把排列顺序改一下,把最新加入的放在最顶即可。
      

  6.   

    仔细看了一下,是被覆盖了,也就说第一次生成的picturebox在上面把下面第二次生成的picturebox给覆盖了。
      

  7.   

    楼主的图片每次都加载到同一位置pic[i].Location = new Point(30, 130*i);
    第二次打开的都被覆盖了.简单解决方法,把图片加载至不同位置
    private static int j;
    窗体_Load事件
    j=1;openFileDialog1_FileOk事件
    {
    {
    ...
    pic[i].Location = new Point(j*110, 130 * i);
    ...
    }
    j++;
    }
      

  8.   

    请问用什么方法可以还在原位置显示,并且清除第一次产生的picturebox?
      

  9.   

    不用清除,调用
    pic[i].BringtoFront()就可
      

  10.   

    this.Controls.Add(pic[i]);
    pic[i].Refresh();
      

  11.   

    有什么方法可以在当前事件清除上次实例化的picturebox,如果总是bringtofront是不是太占用系统资源,下面的picturebox总是在加载着图片的?
      

  12.   

    请问楼上
    怎么dispose();
    我怎么去获得上次实例化的picturebox的索引,出了作用域的。
      

  13.   

    你干麻不给 图片控件不同的坐标呢? 
     
    如果非要放在一起 也是有办法的  
    不过你要了解 为什么有的控件会放在顶层有的控件会放在底层?
    this.Controls[0]的控件会放在容器的最顶层的
    this.Controls[Controls.Count-1]的控件是在容器的最底层的所以  this.Controls.Add(pic[i]);之后要加一句
    this.Controls.SetChildIndex(pic[i], 0);
      

  14.   

    还是那个问题,怎么从openfiledialog_ok事件后从controls里移出这些已经加入的picturebox控件,怎么获得上次的picturebox控件,等当前载入新实例化的picturebox就可以直接显示,不用再加到上层,并且可以节省资源,针对上面的代码?
      

  15.   

    上次的控件 你可以用 this.Controls(this.Controls.Count-1)this.Controls.Remote(this.Controls(this.Controls.Count-1)不是很明白 你到底要做什么? 你既然这样 为什什么 每次打开还要new 2 新的picturebox呢?
    放两个固定的 不更好?
      

  16.   

    wxgwxgwxg()
    我是要从数据库中读出图片加载,每次读出的图片数不固定,所以要每次根据图片数来new picturebox,
    this.controls[this.control.count-1]是根据索引,如何直接从controls访问控件名来dispose, 比如this.control["控件名"],这样好像不行,而且第二次事件pic也出了作用域,也无法获得pic的引用,所以如何去清除上次controls.add的控件?
      

  17.   

    那你把这些图片都放在一个panel里面吧比如叫mypanel  第二次打开时候mypanel.clear();就好了
      

  18.   

    是this.mypanel.Controls.Clear(); 上面我写错了