条件:设计了一个picturebox用来放图片,然后根据条件,放上图片在上,文字在下的按钮20个,这些按钮的排列不能超出图片的范围。
1.背景图是可变化的 有的大 有的小,能否用比例来进行计算,再规定button的大小和尺寸?
2.按钮的大小要随着背景图的大小变化比例而变化,始终保持20个,按钮的排列不超出图片的范围
请高手指教 该如何着手!!如果有代码的话,请附上代码,谢谢!!
1.背景图是可变化的 有的大 有的小,能否用比例来进行计算,再规定button的大小和尺寸?
2.按钮的大小要随着背景图的大小变化比例而变化,始终保持20个,按钮的排列不超出图片的范围
请高手指教 该如何着手!!如果有代码的话,请附上代码,谢谢!!
处理用一下控件的SizeChanged 事件,保证它的Width 和 Height 始终不超过 pictureBox,这样试试?
主要代码如下:
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); //将按钮加入控件集合
}
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;
}
}
"问题主要是要是按钮的排列有弹性,根据载入的图片大小,永远排列在图片的范围内 不超出图片"把方法写到pictureBox1_Resize事件里,完全满足你的需求啊
this.Resize+= new EventHandler(this.pictureBox1.Resize);是把pictureBox1.Resize事件注册到窗体的Resize事件上了,也就是说,在窗体大小改变的情况下,才会触发pictureBox1的Resize事件。同时,即使窗体大小改变了,但pictureBox1的大小并未改变,所以,你当然看不出按钮的变化了。
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;
}
}