环境:vs2005 Winform 语言:C#
问题描述:
    页面上有个panel现在要向panel里面添加图片,图片是通过读取数据库后得到的图片地址,由于图片的数量不确定,所以将这些地址存放在一个对象数组里,如下:
//声明图片高度和y坐标
private int picHeight = 0;
private int Y = 0;
.......
for(int i=0;i<数组.length;i++)
{
 System.Drawing.Image imageCinema = null;
 //自己写的获取完全路径的方法,大家不必在意
 imageCinema = System.Drawing.Image.FromFile((new HiMovie.Terminal.Common.Common()).GetFullPath   (mCinema[0].PhotoPathList[0], true)); //根据图片数量生成相同数量的pictruebox控件
 PictureBox pictureBoxCinema = new PictureBox();
 //设置图片的一些属性
 pictureBoxCinema.Image = imageCinema;
 pictureBoxCinema.SizeMode = PictureBoxSizeMode.AutoSize;
 picHeight = pictureBoxCinema.Size.Height; //将外面的panel随着里面的图片的多少而改变大小长短
 panelCinemaPhoto.Size = new Size(panelCinemaPhoto.Size.Width, panelCinemaPhoto.Size.Height + picHeight); //确定图片控件在panel中的初始位置
 pictureBoxCinema.Location = new Point(0, Y);
  
 //将图片添加在panel中                  
 panelCinemaPhoto.Controls.Add(pictureBoxCinema); //图片随着数量的增加改变高度
 Y += pictureBoxCinema.Size.Height;
}
问题:图片出不来,不知道是后面的图片把前面的覆盖了还是长度不够,但是已经变化了panel的大小了,不知道为什么不能随着图片的增加而增加panel,希望大家给予指正!!!!!

解决方案 »

  1.   

    有一点忘了介绍了!这些图的上面还有一段文字,就是一个lable,里面有些字符串,然后连着下面的图片,这个label不在panel里面
      

  2.   

    imageCinema = System.Drawing.Image.FromFile((new HiMovie.Terminal.Common.Common()).GetFullPath  (mCinema[0].PhotoPathList[0], true)); index不对吧
    永远取数组的第一张图片??
      

  3.   

    干嘛不用listview?设置view为LargeIcon或者SmallIcon之后,又可以绑定数据,方便多了。用来做类似QQ用户列表的面板的都可以
      

  4.   

    应该是你的Panel容器没有添加到当前的Form中
    具体代码:
    this.Controls.Add(panelCinemaPhoto); 
      

  5.   

    我是这样解决的,仅提供参考代码!!
    for (int i = 0; i < mCinema[0].PhotoPathList.Length; i++)
                    {
                        System.Drawing.Image imageCinema = null;
                        try
                        {
                            imageCinema = System.Drawing.Image.FromFile((new HiMovie.Terminal.Common.Common()).GetFullPath(mCinema[0].PhotoPathList[i], true));
                        }
                        catch (Exception ex)
                        {
                            log.WriteLog(OperationType.LOCAL, LoggerType.EXCEPTION, ex.Message);
                        }
                        if (imageCinema == null)
                        {
                            continue;
                        }                    PictureBox pictureBoxCinema = new PictureBox();
                        pictureBoxCinema.Image = imageCinema;
                        pictureBoxCinema.Size = new Size(1, 1);
                        pictureBoxCinema.SizeMode = PictureBoxSizeMode.AutoSize;
                        picHeight = pictureBoxCinema.Size.Height;
                        if (panelCinemaPhoto.Controls.Count == 0)
                        {
                            panelCinemaPhoto.Size = new Size(panelCinemaPhoto.Size.Width, picHeight);
                        }
                        else
                        {
                            panelCinemaPhoto.Size = new Size(panelCinemaPhoto.Size.Width, panelCinemaPhoto.Size.Height + picHeight);
                        }
                        pictureBoxCinema.Location = new Point(0, Y);                    panelCinemaPhoto.Controls.Add(pictureBoxCinema);
                        Y += pictureBoxCinema.Size.Height+50;
                    }主要原因是控制器那里的条件出问题了!给大家结帐
     /// <summary>
            /// btnUp_Choose
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnUp_Choose(object sender, EventArgs e)
            {
                if (pnlInner.Location.Y == 0)
                {
                    btnUp.Visible = false;
                    btnDown.Visible = true;
                    if (mTimer != null)
                    {
                        mTimer.Stop();
                        mTimer.Dispose();
                        mTimer = null;
                        mCMouseOnControl = null;
                    }
                    btnDown.Enabled = true;
                }
                else
                {
                    btnDown.Visible = true;
                    pnlInner.Location = new Point(pnlInner.Location.X, pnlInner.Location.Y + iMoveSpeed);
                    pnlInner.Size = new Size(pnlInner.Size.Width, pnlInner.Size.Height - iMoveSpeed);
                    intmove -= iMoveSpeed;
                }
            }/// <summary>
            /// btnDown_Choose
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnDown_Choose(object sender, EventArgs e)
            {
                if ((pnlInner.Location.Y + iHeight) < (panelLeft.Location.Y + panelLeft.Size.Height))
                {
                    btnDown.Visible = false;
                    btnUp.Visible = true;
                    if (mTimer != null)
                    {
                        mTimer.Stop();
                        mTimer.Dispose();
                        mTimer = null;
                        mCMouseOnControl = null;
                    }
                }
                else
                {
                    btnUp.Visible = true;
                    pnlInner.Location = new Point(pnlInner.Location.X, pnlInner.Location.Y - iMoveSpeed);
                    pnlInner.Size = new Size(pnlInner.Size.Width, pnlInner.Size.Height + iMoveSpeed);
                }
            }
    /// <summary>
            /// 定时器事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void mTimer_Tick(object sender, EventArgs e)
            {
                if (mCMouseOnControl == btnUp)
                {
                    btnUp_Choose(sender, e);
                }
                else
                {
                    btnDown_Choose(sender, e);
                }
            }这里是控制器的解决办法!就是红字部分没判断好!