看看下面的代码
if (mainpanel.Controls.Count>0)
{
   for(int ii=0;ii<mainpanel.Controls.Count;ii++)
      {
curImage=(Bitmap)mypb[ii].Image;
g.DrawImage(curImage,new Rectangle(mypb[ii].Left,mypb[ii].Top,mypb[ii].Width,mypb[ii].Height));
}
}
当Controls.Count>2时,为什么只执行一次就不执行g.DrawImage(curImage,new Rectangle(mypb[ii].Left,mypb[ii].Top,mypb[ii].Width,mypb[ii].Height));该语句了,为什么?
系统提示没有初始化实列,为什么第一次不提示,
分不够再加,在线等......

解决方案 »

  1.   

    你要检查一下mypb这个数组的长度是否与Controls集合的Count值相等……
      

  2.   

    mypb是什么控件的数组?
    确定mypb.Count >= 1?
    确定每个控件的Image属性都初始化过么?
      

  3.   

    我的mypb是这样申明的  public PictureBox[] mypb=new PictureBox[100];
    mypb.Count >= 1?不知道你是什么意思
      

  4.   

    for循环中执行第一次之后ii值是否被置为除了1之外的其他值?
      

  5.   

    确定对mypb初始化过么?
    PictureBox box = new PictureBox();
    box.Image = ????;
    mypb.SetValue(box,......);
    代码 瞎写的, 只是表示一个意思
      

  6.   

    for循环中执行第一次之后ii值是根据mainpanel.Controls.Count来变化的,
      

  7.   

    for循环中执行第一次之后ii值是根据mainpanel.Controls.Count来变化的,------
    理论上是这样的,看看有没有异常。g.DrawImage的函数执行的时候有无异常?
      

  8.   

    我发现g.DrawImage的函数执行的时候有异常,但不知道该怎么做.
      

  9.   

    你要先判断 Count有几个值,然后在看条件,
      

  10.   

    我发现但mainpanel.Controls.Count>2时候,就只执行curImage=(Bitmap)mypb[ii].Image;
    后面的代码都不执行,用try catch处理异常,提示没有实列化,不明白是那个没有实列化,
      

  11.   

    Count值是变化的,根据mainpanel里的图片变化的
      

  12.   

    g.DrawImage的函数肯定有异常,你在g.DrawImage中把错误抛出来,贴出来看看。
      

  13.   

    我的全部代码: protected void PrintPageEventHandler( Object obj, PrintPageEventArgs ev)
    {
    try
    {
    Graphics g = ev.Graphics;
    g.PageUnit = GraphicsUnit.Point;
    if (mainpanel.Controls.Count>0)
    { for(int ii=0;ii<mainpanel.Controls.Count;ii++)
    {
    curImage=(Bitmap)mypb[ii].Image;
    mypb[ii].Image=curImage;
    g.DrawImage(curImage,new Rectangle(mypb[ii].Left,mypb[ii].Top,mypb[ii].Width,mypb[ii].Height));
    }
    }
    ev.HasMorePages = false;
    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.ToString(),"系统提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }
    }
      

  14.   

    是不是这句出问题了?curImage=(Bitmap)mypb[ii].Image;
    你设置断点之后看看是不是这句出错?
      

  15.   

    curImage=(Bitmap)mypb[ii].Image;
    g.DrawImage(curImage,new Rectangle(mypb[ii].Left,mypb[ii].Top,mypb[ii].Width,mypb[ii].Height));我个人觉得你的问题是,在定义curImage没有初始化,但是方法中传对象必须初始化,当然你也可以用OUT关键字强制不初始化
    如:g.DrawImage(out curImage,new Rectangle(mypb[ii].Left,mypb[ii].Top,mypb[ii].Width,mypb[ii].Height));
      

  16.   

    curImage=(Bitmap)mypb[ii].Image;
    该句有错,不知道为什么错了
      

  17.   

    你的控件要findcontrol才能找得到吧
      

  18.   

    findcontrol???????
    请说明白点
      

  19.   

    Samen168你的意思mainpanel.Controls.Count是1,不对,这个值是变化的.
    帮帮忙!急死了
      

  20.   

    当mainpanel.Controls.Count>2时就会有异常,
    for(int ii=0;ii<mainpanel.Controls.Count;ii++)
    {
    curImage=(Bitmap)mypb[ii].Image;
    mypb[ii].Image=curImage;
    g.DrawImage(curImage,new Rectangle(mypb[ii].Left,mypb[ii].Top,mypb[ii].Width,mypb[ii].Height));
    }
    但ii=1时运行到curImage=(Bitmap)mypb[ii].Image;就出项异常错误?
    为什么?为什么第一次不出现异常错误呢?
      

  21.   

    curImage的初始化在哪里?我想它和字符串的意义应该是一样的吧?
    如果是字符串,要在for之外定义 string myStr="";不知道是不是这个原因,你现在用的这些我没有接触过,帮你顶吧,期待高手解决。
      

  22.   

    for(int ii=0;ii<mainpanel.Controls.Count;ii++)
    {
     if(mypb[ii] != null)
     {
      Image image= mypb[ii].Image;
      if(image != null)
      {
        curImage=image as Bitmap;
        if(curImage != null)
        {
          g.DrawImage(curImage,new Rectangle(mypb[ii].Left,mypb[ii].Top,mypb[ii].Width,mypb[ii].Height));
        }
      }
     }
    }把curImage=(Bitmap)mypb[ii].Image;语句分开写,便于跟踪。
    你调试的话应该很容易定位错误的。
      

  23.   

    对,参照xujiaoxiang(翱翔)进行调试错误。试一下先!
      

  24.   

    怪了,按照xujiaoxiang(翱翔)跟踪但mainpanel.Controls.Count>6时候,但到4和5的时候不执行下面的代码,怪了.总少执行一次或两次.
      

  25.   

    但我为什么mainpanel.Controls.Count值跟其他代码有关系吗?
    我现在也怀疑其他代码有问题,但这样,实在是太麻烦了,郁闷中.......
      

  26.   

    for(int ii=0;ii<mainpanel.Controls.Count;ii++)
    {
    string obj = "mypb[" + ii.ToString + "]";
    msg = " 没有初始化实列";
    System.Diagnostics.Debug.Assert(mypb[ii] != null,obj + msg); Image image= mypb[ii].Image;
    msg = ".Image没有初始化实列";
    System.Diagnostics.Debug.Assert(image != null,obj + msg); curImage=image as Bitmap;
    msg = ".Image不是Bitmap类型";
    System.Diagnostics.Debug.Assert(curImage != null,obj + msg); g.DrawImage(curImage,new Rectangle(mypb[ii].Left,mypb[ii].Top,mypb[ii].Width,mypb[ii].Height));
    }换上这个试试。可以确定是哪个值不对了。
    楼主你好象不太会调试阿。最好找资料学习一下。
      

  27.   

    xujiaoxiang(翱翔)太谢谢你了,我还是个新手,你给我的方法很不错,
    我不怎么会调试啊,反正总是少执行两次,当执行到后两次的时候提示 mypb[4]没有被实列化,怎么会事!
      

  28.   

    那就是mypb[4]没有被实列化。应该去查mypb实列化的代码。
      

  29.   

    curImage=(Bitmap)mypb[ii].Image;
    你的mypb好象没有被符过值哦?没有符过值的就不能直接用!它里面存的什么?没有看出来
      

  30.   

    我的mypb 是这样申明的
    PictureBox[] mypb=new PictureBox[100];
    与mypb[4]没有什么关系的,或者说与mypb[4]代码没有关系,我也没有mypb[4]的代码,总之要少执行一次.
      

  31.   

    楼主,还没有解决?
    我总感觉你的curImage和mypb的定义有问题,但是又说不好是哪里的问题。帮你顶了!
      

  32.   

    我感觉是mypb的问题,这个是public类型,
    不知道该怎么解决了,郁闷