C#winform设置窗体自动缩放适应不同尺寸的电脑屏幕大小 适应不同的分辨率

您所在的位置:网站首页 xmind窗口不能调整大小 C#winform设置窗体自动缩放适应不同尺寸的电脑屏幕大小 适应不同的分辨率

C#winform设置窗体自动缩放适应不同尺寸的电脑屏幕大小 适应不同的分辨率

2023-04-23 02:41| 来源: 网络整理| 查看: 265

C#winform设置窗体自动缩放适应不同尺寸的电脑屏幕大小 适应不同的分辨率 (带dataGridView控件)解决dataGridView控件不能调整行高的问题

由于用户屏幕大小不同分辨率和缩放比例不同,固定大小的窗体不能满足所有人的需求,窗体缩放就成为了一个困扰,我在网上寻找过多种方法,以下方法最好用,再次对该贴作者表示感谢。

另外由于软件需求原先的代码无法做到dataGridView,listView等表格性的控件里面  列宽,行高,字体大小  做出相应改变,所以本人进行了相应的修改,以下代码以dataGridViewInfo为例做了个示范:

其他控件具体问题具体分析,希望以下代码能帮助到你。

一、控件准备

1.  首先在窗体上放上一个Panel容器,并将容器的Dock属性设为Fill,即所有的控件都放在了这个容器里。

二、代码准备

#region控件缩放

        double formWidth;//窗体原始宽度

        double formHeight;//窗体原始高度

        double scaleX;//水平缩放比例

        double scaleY;//垂直缩放比例

        double HeadersHeight;//dataGridView抬头高度

        double RowTemplateHeight;//dataGridView行高

        DictionarycontrolInfo = new Dictionary();//控件中心Left,Top,控件Width,控件Height,控件字体Size

//添加了dategridview的

    //dataGridViewInfo

        List dataGridViewInfo = newList();//dataGridView每列的宽度顺序一一对应。

        ///

        ///获取所有原始数据

        ///

        protected void GetAllInitInfo(ControlCrlContainer)

        {

            if (CrlContainer.Parent == this)

            {

                formWidth = Convert.ToDouble(CrlContainer.Width);

                formHeight =Convert.ToDouble(CrlContainer.Height);

            }

            foreach (Control item inCrlContainer.Controls)

            {

                if (item.Name.Trim() !="")

                    controlInfo.Add(item.Name,(item.Left + item.Width / 2) + "," + (item.Top + item.Height / 2) +"," + item.Width + "," + item.Height + "," +item.Font.Size);

                if(item.Name.Contains("dataGridView"))

                {

                    for (int i = 0; i

                    {

                       dataGridViewInfo.Add(Convert.ToInt32(this.dataGridView1.Columns[i].Width));

                    }

                    HeadersHeight =this.dataGridView1.ColumnHeadersHeight;

                    RowTemplateHeight =this.dataGridView1.RowTemplate.Height;

                }

                if ((item as UserControl) ==null && item.Controls.Count > 0)

                    GetAllInitInfo(item);

            }

        }

        private void ControlsChangeInit(ControlCrlContainer)

        {

            scaleX =(Convert.ToDouble(CrlContainer.Width) / formWidth);

            scaleY =(Convert.ToDouble(CrlContainer.Height) / formHeight);

        }

        private void ControlsChange(ControlCrlContainer)

        {

            try

            {

                double[] pos = newdouble[5];//pos数组保存当前控件中心Left,Top,控件Width,控件Height,控件字体Size

                foreach (Control item inCrlContainer.Controls)

                {

                    if (item.Name.Trim() !="")

                    {

                        if ((item asUserControl) == null && item.Controls.Count > 0)

                           ControlsChange(item);

                        string[] strs =controlInfo[item.Name].Split(',');

                        for (int j = 0; j 0)

            {

               ControlsChangeInit(this.Controls[0]);

               ControlsChange(this.Controls[0]);

            }

        }

//调用函数

publicForm2()

        {

            InitializeComponent();

            GetAllInitInfo(this.Controls[0]);

}



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3