源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#实现窗体中的各个控件同比自动放缩大小

  • 时间:2021-07-04 10:12 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#实现窗体中的各个控件同比自动放缩大小
实现方式主要是利用panel控件为主题,对于每个控件的大小位置和字体这几个属性进行记录,然后根据窗体改变的大小同时放缩。 [b]简要步骤如下:[/b] 1、创建C#窗体程序项目。 2、Panel放置到窗体。 3、设置属性dock为fill。 4、注意MinnumSize不能设置为0, 改成大于0都行。
[u]复制代码[/u] 代码如下:
public partial class FrmDemo : Form      {          double dFrmWidth;          double dFrmHeight;          double dZoomHorizon;          double dZoomVerticality;          Dictionary<string, string> dicControlsAttribute = new Dictionary<string, string>();            protected void GetAllInitiateContrlInfo(Control CrlContainer)          {              if (CrlContainer.Parent == this)              {                  dFrmWidth = Convert.ToDouble(CrlContainer.Width);                  dFrmHeight = Convert.ToDouble(CrlContainer.Height);              }              foreach (Control item in CrlContainer.Controls)              {                  if (item.Name.Trim() != "")                      dicControlsAttribute.Add(item.Name, (item.Left + item.Width / 2) + "," + (item.Top + item.Height / 2)                                                + "," + item.Width + "," + item.Height + "," + item.Font.Size);                  if ((item as UserControl) == null && item.Controls.Count > 0)                      GetAllInitiateContrlInfo(item);              }          }            private void ChangeControlsInitiate(Control CrlContainer)          {              dZoomHorizon = (Convert.ToDouble(CrlContainer.Width) / dFrmWidth);              dZoomVerticality = (Convert.ToDouble(CrlContainer.Height) / dFrmHeight);          }                    private void ChangeCurrentControlAttr(Control CrlContainer)          {              double[] dPosition = new double[5];              foreach (Control item in CrlContainer.Controls)              {                  if (item.Name.Trim() != "")                  {                      if ((item as UserControl) == null && item.Controls.Count > 0)                          ChangeCurrentControlAttr(item);                      string[] strs = dicControlsAttribute[item.Name].Split(',');                      for (int j = 0; j < 5; j++)                      {                          dPosition[j] = Convert.ToDouble(strs[j]);                      }                      double itemWidth = dPosition[2] * dZoomHorizon;                      double itemHeight = dPosition[3] * dZoomVerticality;                      item.Left = Convert.ToInt32(dPosition[0] * dZoomHorizon - itemWidth / 2);                      item.Top = Convert.ToInt32(dPosition[1] * dZoomVerticality - itemHeight / 2);                      item.Width = Convert.ToInt32(itemWidth);                      item.Height = Convert.ToInt32(itemHeight);                      //item.Font = new Font(item.Font.Name, float.Parse                      //((dPosition[4] * Math.Min(dZoomHorizon, dZoomVerticality)).ToString()));                      //字体也可以实现同比放缩。                       }              }          }          protected override void OnSizeChanged(EventArgs e)          {              base.OnSizeChanged(e);              if (dicControlsAttribute.Count > 0)              {                  ChangeControlsInitiate(this.Controls[0]);                  ChangeCurrentControlAttr(this.Controls[0]);              }          }             public FrmDemo()          {              InitializeComponent();              GetAllInitiateContrlInfo(this.Controls[0]);//构造函数里面调用即可。          }  }
5、效果测试 [img]http://files.jb51.net/file_images/article/201410/20141013132446662.jpg?201491313255[/img] [img]http://files.jb51.net/file_images/article/201410/20141013132517339.jpg?2014913132525[/img]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部