zoukankan      html  css  js  c++  java
  • WinForm 根据屏幕分辨率自适应

    方法来自百度, 不算太好,但目前能满足需求。(窗口在LOAD的时候记录每个控件的坐标,每次窗口重绘的时候引时SizeChange事件,根据比率重新设置坐标)

    以下是代码  AutoSizeFormClass类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace SalesClient.Sys
    {
       public class AutoSizeFormClass
        {
            public struct controlRect
            {
                public int Left;
                public int Top;
                public int Width;
                public int Height;
            }
    
            private bool _Flag;
            public bool Flag
            {
                get { return _Flag; }
                set { _Flag = value; }
            }
    
            private int _Number;
            public int Number
            {
                get { return _Number; }
                set { _Number = value; }
            }
    
            private List<controlRect> oldCtrl;
    
            public void Initialize(Form mForm)
            {
                oldCtrl = new List<controlRect>();
                controlRect cR;
    
                cR.Left = mForm.Left;
                cR.Top = mForm.Top;
                cR.Width = mForm.Width;
                cR.Height = mForm.Height;
    
                oldCtrl.Add(cR);
    
                foreach (Control c in mForm.Controls)
                {
                    controlRect objCtrl;
                    objCtrl.Left = c.Left;
                    objCtrl.Top = c.Top;
                    objCtrl.Width = c.Width;
                    objCtrl.Height = c.Height;
                    oldCtrl.Add(objCtrl);
                }
                Flag = true;
                Number = mForm.Controls.Count;
            }
    
            public void ReSize(Form mForm)
            {
                if (!Flag) return;
    
                float wScale = (float)mForm.Width / (float)oldCtrl[0].Width;
                float hScale = (float)mForm.Height / (float)oldCtrl[0].Height;
    
                int ctrLeft0, ctrTop0, ctrWidth0, ctrHeight0;
                int ctrlNo = 1;
    
                try
                {
                    if (mForm.Controls.Count != Number) return;
                    foreach (Control c in mForm.Controls)
                    {
                        ctrLeft0 = oldCtrl[ctrlNo].Left;
                        ctrTop0 = oldCtrl[ctrlNo].Top;
                        ctrWidth0 = oldCtrl[ctrlNo].Width;
                        ctrHeight0 = oldCtrl[ctrlNo].Height;
    
                        c.Left = (int)(ctrLeft0 * wScale);
                        c.Top = (int)(ctrTop0 * hScale);
                        c.Width = (int)(ctrWidth0 * wScale);
                        c.Height = (int)(ctrHeight0 * hScale);
                        ctrlNo += 1;
                    }
                }
                catch
                {
                    return;
                }
            }
        }
    }

    在要设置的窗体里

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace SalesClient.HT
    {
        public partial class test : Form
        {
            public test()
            {
                InitializeComponent();
            }
            SalesClient.Sys.AutoSizeFormClass asc = new SalesClient.Sys.AutoSizeFormClass();

            private void test_Load(object sender, EventArgs e)
            {
                asc.Initialize(this);
            }

            private void test_SizeChanged(object sender, EventArgs e)
            {
                asc.ReSize(this);
            }
        }
    }

    效果图

    原来

    image

    放大后

    image

    这样如果屏幕分辨率改变,就可以根据缩放比率进行调整 。

  • 相关阅读:
    php省市联动实现
    json学习笔记
    ajax无刷新技术
    session和cookie
    缩略图,透明度,水印,图片合并
    PHP画矩形,椭圆,圆,画椭圆弧 ,饼状图
    PHP字母数字验证码和中文验证码
    PHP画图的基本步骤GD库
    文件上传和多文件上传
    js身份证验证
  • 原文地址:https://www.cnblogs.com/LiuLaoCai/p/3426532.html
Copyright © 2011-2022 走看看