条件:设计了一个picturebox用来放图片,然后根据条件,放上图片在上,文字在下的按钮20个,这些按钮的排列不能超出图片的范围。
1.背景图是可变化的  有的大  有的小,能否用比例来进行计算,再规定button的大小和尺寸?
2.按钮的大小要随着背景图的大小变化比例而变化,始终保持20个,按钮的排列不超出图片的范围
请高手指教  该如何着手!!如果有代码的话,请附上代码,谢谢!!

解决方案 »

  1.   

    使用一个for循环来动态添加按钮
      

  2.   

    这个,好像一个TableLayoutPanel控件 就好了呀~
      

  3.   

    对了  一开始我考虑过使用flowlayoutpanel  但是不知道怎么去判断图标是否超出了图片的范围
      

  4.   


    处理用一下控件的SizeChanged 事件,保证它的Width 和 Height 始终不超过 pictureBox,这样试试?
      

  5.   

    建议LZ去找本C#实例的书来学习,推荐个:《C#开发实战1200例》,或者去“源码爱好者”这个网站下载一些源代码来学习。本人也在C#初学阶段,逼着自己要打好基础,以后什么路都好走……
    主要代码如下:
    private void Frm_Main_MouseClick(object sender,MouseEventArgs e)
    {
       Button bt = new Button()   //创建按钮对象
        {
       Text = "动态生成按钮";        //设置按钮的文本信息
        ForeColor = Color.FromArgb(    //设置按钮前景颜色
        G_Random.Next(0,255),
       G_Random.Next(0,255),
       G_Random.Next(0,255)),
       AutoSize = true,         //设置按钮自动调整大小
        Location = e.Location     //设置按钮位置 
       }; 
       Controls.Add(bt);     //将按钮加入控件集合
      

  6.   


            private void pictureBox1_Resize(object sender, EventArgs e)
            {
                int width = pictureBox1.Width / 20;
                int left = pictureBox1.Left;
                int top = pictureBox1.Top + pictureBox1.Height;
                for (int i = 0; i < 20; i++)
                {
                    Button btn = new Button();
                    btn.Name = "btn" + i.ToString();
                    btn.Text = btn.Name;
                    btn.Width = width;
                    btn.Left = left;
                    btn.Top = top;
                    left += width;
                    this.Controls.Add(btn);
                    btn.Visible = true;
                }
            }
      

  7.   

    继续哈,谢谢楼上的回复,UPUP
      

  8.   

    To LZ:
    "问题主要是要是按钮的排列有弹性,根据载入的图片大小,永远排列在图片的范围内 不超出图片"把方法写到pictureBox1_Resize事件里,完全满足你的需求啊
      

  9.   

    后台动态生成按钮添加上去不行吗!好像这个最好用WPF来实现,轻松得多
      

  10.   

    我写了this.Resize+= new EventHandler(this.pictureBox1.Resize);但是resize事件好像都没用到,请问这是什么问题
      

  11.   

    To LZ:
    this.Resize+= new EventHandler(this.pictureBox1.Resize);是把pictureBox1.Resize事件注册到窗体的Resize事件上了,也就是说,在窗体大小改变的情况下,才会触发pictureBox1的Resize事件。同时,即使窗体大小改变了,但pictureBox1的大小并未改变,所以,你当然看不出按钮的变化了。
      

  12.   

    你用下面的方法,就会看到效果了:        int w = 0;
            private void button1_Click(object sender, EventArgs e)
            {
                pictureBox1.Width += w;
                w += 20;
            }        private void pictureBox1_Resize(object sender, EventArgs e)
            {
                int width = pictureBox1.Width / 20;
                int left = pictureBox1.Left;
                int top = pictureBox1.Top + pictureBox1.Height;
                for (int i = 0; i < 20; i++)
                {
                    Button btn = new Button();
                    btn.Name = "btn" + i.ToString();
                    btn.Text = btn.Name;
                    btn.Width = width;
                    btn.Left = left;
                    btn.Top = top;
                    left += width;
                    this.Controls.Add(btn);
                    btn.Visible = true;
                }
            }