C#之WinForm界面分辨率问题

时间:2022-09-12 14:51:09

  在做上一个C#小工具的时候,当时为了处理界面最大化,分辨率问题,只是简单的用各种···Panle控价简单随意的处理控件的大小位置,字体什么的就随缘了(貌似有点不负责任啊,嘿嘿~)。

  所以在开始第二个C#小工具的时候,就又想到了这个问题,下面就贴代码啦↓↓↓

 

public Form1()
{
  InitializeComponent();
  x = this.Width;
  y = this.Height;
  setTag(this);
}
private float x;//定义当前窗体的宽度
private float y;//定义当前窗体的高度
private void setTag(Control cons)
{
  foreach (Control con in cons.Controls)
  {
    con.Tag = con.Width + ";" + con.Height + ";" + con.Left + ";" + con.Top + ";" + con.Font.Size;
    if (con.Controls.Count > 0)
    {
      setTag(con);
    }
  }
}
private void setControls(float newx, float newy, Control cons)
{
  //遍历窗体中的控件,重新设置控件的值
  foreach (Control con in cons.Controls)
  {
    //获取控件的Tag属性值,并分割后存储字符串数组
    if (con.Tag != null)
    {
      string[] mytag = con.Tag.ToString().Split(new char[] { ';' });
      //根据窗体缩放的比例确定控件的值
      con.Width = Convert.ToInt32(System.Convert.ToSingle(mytag[0]) * newx);//宽度
      con.Height = Convert.ToInt32(System.Convert.ToSingle(mytag[1]) * newy);//高度
      con.Left = Convert.ToInt32(System.Convert.ToSingle(mytag[2]) * newx);//左边距
      con.Top = Convert.ToInt32(System.Convert.ToSingle(mytag[3]) * newy);//顶边距
      Single currentSize = System.Convert.ToSingle(mytag[4]) * newy;//字体大小
      con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
      if (con.Controls.Count > 0)
      {
        setControls(newx, newy, con);
      }
    }
  }
}

private void Form1_Resize(object sender, EventArgs e)   
{
  float newx = (this.Width) / x;
  float newy = (this.Height) / y;
  setControls(newx, newy, this);
}

 

嗯,这个就到这就结束了。