picturebox中的图片我是取相对路径的图片,,但是当窗口最大化以后(写了控件随窗口变化改变的代码),picturebox改变了,但是里面的image就不能充分填充picturebox,应该怎么做才能实现充分填充注: 不要告诉我改picturebox的属性,不好用!谢谢

解决方案 »

  1.   

    不改属性怎么做呀?没法做,都是属性。将PictureBox对象的SizeMode设置成Zoom或StretchImage,图像就会随着框的大小改变。
    如果还是不行,就在PictureBox的Resize事件处理函数中,再设置一遍它的Image对象便是。
      

  2.   

    不改属性你想怎么做?
    在窗口最大化PictureBox随窗口变动后再设置下SizeMode,可能可以,
      

  3.   

    我的意思是说告诉我改变PictureBox的SizeMode属性,设置成StretchImage,这个不管用
    就是这意思
      

  4.   

    你在在PictureBox的Resize事件中,重新加载下这个图片就可以了。
      

  5.   

    是你图片没有那么大吧!设置下SizeMode试试...
      

  6.   


    不行,因为我有控件随窗口改变的代码,如果窗口最大化的时候,PictureBox变大了吧,但是PictureBox中取的image还是原来的图片大小,因为image图片是没有改变大小的 ,给我个实现思路就行,怎么能让图片充分填充PictureBox
      

  7.   

    楼主:
       
     private void setTag(Control cons)
            {
                foreach (Control con in cons.Controls)
                {
                   // if (con is PictureBox) continue;这里注释掉
                    con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
                    if (con.Controls.Count > 0)
                    {
                        setTag(con);
                    }
                }
            }
            private void setConstrols(float newx, float newy, Control cons)
            {
                foreach (Control con in cons.Controls)
                {
                  //  if (con is PictureBox) continue;别忘了将这里注释掉
                    string[] mytag = con.Tag.ToString().Split(new char[] { ':' });
                    float a = Convert.ToSingle(mytag[0]) * newx; con.Width = (int)a;
                    a = Convert.ToSingle(mytag[1]) * newy;
                    con.Height = (int)(a);
                    a = Convert.ToSingle(mytag[2]) * newx;
                    con.Left = (int)(a);
                    a = Convert.ToSingle(mytag[3]) * newy;
                    con.Top = (int)(a);
                    Single currentSize = Convert.ToSingle(mytag[4]) * newy;
                    con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
                    if (con.Controls.Count > 0)
                    {
                        setConstrols(newx, newy, con);
                    }
                }
            }
    然后:this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
    我在自己电脑上测试完全可以!
      

  8.   

    哥们,我知道这样做,但是我需要建立这PictureBox的点击事件,也就是说我click这PictureBox后,我需要实现变色,证明我点上了,变色我是让背景图片显示出来,这样就可以了,但是这时候就会出现我说的问题了,我还有什么别的办法么
      

  9.   

    你干吗不早说你的图片是背景图片?
    问题已解决:        private void pictureBox1_Click(object sender, EventArgs e)
            {            
                
                System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
                pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.BackgroundImage")));
                this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                
            }
    你最好还是不用背景图片,用pictureBox1.Image来回切换图片.
      

  10.   

     pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.BackgroundImage")));
    首先你通过浏览得到的图片都保存在 Form1.resx里面.其实你只要打开Form1.Designer.cs就会发现我其实就是按照这样的做法来的.你也可以这样做,打开Form1.resx,添加几张图片,点击图片的时候用pictureBox1.Image来切换,而不用BackgroundImage
    这样就完全没有你上面的问题了.