日期:2014-05-18  浏览次数:20745 次

界面缩放后,如何使在界面里的button按钮也随着变化大小和位置!!
public partial class Form4 : Form
  {
  public Form4()
  {
  InitializeComponent();
  }

  /// <summary>
  /// 0:界面1;1:界面2;2:界面3;
  /// </summary>
  private int _UIFlag = 0;
  /// <summary>
  /// 刷新界面控件
  /// </summary>
  private void RefreshUI()
  {
  if (_UIFlag == 0)
  {
  btn_Enter.Visible = true;
  btn_Office.Visible = false;
  btn_Name.Visible = false;
  btn_Num.Visible = false;
  }
  else if (_UIFlag == 1)
  {
  btn_Enter.Visible = false;
  btn_Office.Visible = true;
  btn_Name.Visible = true;
  btn_Num.Visible = true;
  }  
  }

  /// <summary>
  /// 刷新界面控件大小和位置
  /// </summary>
  private void RefreshUIPosition()
  { //界面缩放后,button的位置和大小随之改变
   
  }

  private void btn_Enter_Click(object sender, EventArgs e)
  {
  this.BackgroundImage = System.Drawing.Image.FromFile(@"F:\image\版面-02.jpg");
  _UIFlag = 1;
  RefreshUI();
  }
  private void Form4_ClientSizeChanged(object sender, EventArgs e)
  {
  RefreshUIPosition();
  }
求大神,这是部分代码。。主要想实现改变了背景大小后,怎么使背景上的button按钮也会改变大小。。。



------解决方案--------------------
public void AutoScales(Form frm)
{
frm.Tag = frm.Width.ToString() + "," + frm.Height.ToString();
frm.SizeChanged += new EventHandler(frmScreen_SizeChanged);

}
private void frmScreen_SizeChanged(object sender, EventArgs e)
{
if (flage == 1)
{
flage++;
string[] tmp = ((Form)sender).Tag.ToString().Split(',');
float width = (float)((Form)sender).Width / (float)Convert.ToInt16(tmp[0]);
float heigth = (float)((Form)sender).Height / (float)Convert.ToInt16(tmp[1]);
((Form)sender).Tag = ((Form)sender).Width.ToString() + "," + ((Form)sender).Height;
foreach (Control control in ((Form)sender).Controls)
{
control.Scale(new SizeF(width, heigth));
}
}
}
------解决方案--------------------
代码来了,亲测可行
C# code

 private void Form1_SizeChanged(object sender, EventArgs e)
        {
            float x = this.Width / oldsize.Width; //oldsize为窗口原来大小
            float y = this.Height / oldsize.Height;
            foreach (Control ctr in this.Controls)
            {
                if (ctr.GetType() == typeof(Button))
                {
                    ctr.Left = (int)(ctr.Location.X * x);
                    ctr.Top = (int)(ctr.Location.Y * y);
                    ctr.Width = (int)(ctr.Width * x);
                    ctr.Height = (int)(ctr.Height * y);
                }
                oldsize = this.Size;
            }
        }