Winform中实现窗体控件适配(自适应窗体)布局_通过C#代码方式

这篇具有很好参考价值的文章主要介绍了Winform中实现窗体控件适配(自适应窗体)布局_通过C#代码方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实现效果

1.1、未启用控件缩放的实现效果

即:未启用控件缩放效果代码时,控件内容都是固定在窗体界面的指定位置,不会跟随窗体的拉伸,放大而进行适配,如下图所示:

Winform中实现窗体控件适配(自适应窗体)布局_通过C#代码方式

1.2、启用控件缩放的实现效果

即:启用控件缩放效果代码时,控件内容会跟随窗体的拉伸,放大而进行适配,如下图所示:

Winform中实现窗体控件适配(自适应窗体)布局_通过C#代码方式

二、实现控件随窗体缩放适配

2.1、控件随窗体缩放适配思路

实现思路是:

①在窗体初始化时先获取窗体的宽度和高度,然后;

②遍历窗体控件进行初始化设置缩放位置;

③在窗体变化时获取当前窗体的宽度和高度,然后遍历窗体控件进行设置。

2.2、控件随窗体适配的核心代码

#region 控件大小随窗体大小等比例缩放

        private readonly float x; //定义当前窗体的宽度
        private readonly 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)
                {
                    var mytag = con.Tag.ToString().Split(';');
                    //根据窗体缩放的比例确定控件的值
                    con.Width = Convert.ToInt32(Convert.ToSingle(mytag[0]) * newx); //宽度
                    con.Height = Convert.ToInt32(Convert.ToSingle(mytag[1]) * newy); //高度
                    con.Left = Convert.ToInt32(Convert.ToSingle(mytag[2]) * newx); //左边距
                    con.Top = Convert.ToInt32(Convert.ToSingle(mytag[3]) * newy); //顶边距
                    var currentSize = Convert.ToSingle(mytag[4]) * newy; //字体大小                   
                    if (currentSize > 0) con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
                    con.Focus();
                    if (con.Controls.Count > 0) setControls(newx, newy, con);
                }
        }


        /// <summary>
        /// 重置窗体布局
        /// </summary>
        private void ReWinformLayout()
        {
            var newx = Width / x;
            var newy = Height / y;
            setControls(newx, newy, this);

        }

        #endregion

三、使用方法

3.1、在窗体构造函数内初始化适配

        //注意:UIComponetForm是自己需进行适配的窗体名称
        public UIComponetForm()
        {
            InitializeComponent();

            #region   初始化控件缩放

            x = Width;
            y = Height;
            setTag(this);

            #endregion 
        }

3.2、重置缩放布局

Winform中实现窗体控件适配(自适应窗体)布局_通过C#代码方式

        private void UIComponetForm_Resize(object sender, EventArgs e)
        {
            //重置窗口布局
            ReWinformLayout();
        }

至此通过使用C#代码实现窗体控件适配(自适应窗体)布局下过完成,运行项目即可查看效果。文章来源地址https://www.toymoban.com/news/detail-416157.html

到了这里,关于Winform中实现窗体控件适配(自适应窗体)布局_通过C#代码方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python_PySide2学习笔记(二)】QTabWidget 添加布局Layout \ QTabWidget 内控件大小自适应父窗体大小

    在做项目过程中遇到Tab页内的控件无法随着窗体大小变化,针对此问题需要对添加的Tab1、Tab2、Tab3…分别添加布局。 我们可以看到在窗体最大化后,只有Tab页内的QTableWidget控件没有自适应窗体尺寸,还是保持着原有尺寸。 在Qt Designer内查看 对象查看器: 发现只有tab_1和tab_

    2024年02月05日
    浏览(70)
  • C#桌面程序(winform)如何一步步集成内置WebApi(owin技术),解耦IIS,并将Api接收信息推给桌面窗体控件展示

    最近工厂有个需求,服务器上部署了一个服务,此服务要把信息推送给现场多台工控机上的CS上位机程序。由于涉及到多个软件之间的通信,做架构时,首先排除掉中间表形式,从效率和稳定性上也排除掉了Socket,最后采用了WebApi接口形式来做通信。但是有个问题,上位机程

    2023年04月08日
    浏览(46)
  • 使用双缓冲技术解决winform窗体控件卡顿(dataGridView加载数据缓慢)

    在做C/S项目中,做好的窗体出现了页面加载控件缓慢,放大、缩小窗体之后,窗体加载卡顿,以及数据渲染缓慢。 百度介绍:我们看电视时,看到的屏幕称为OSD层,也就是说,只有在OSD层上显示图像我们才能看到。现在,我需要创建一个虚拟的、看不见但是可以在上面画图(

    2024年02月02日
    浏览(46)
  • 【C#】【WinForm】MDI窗体

    MDI窗体的相关学习使用 1、设置MDI父窗体  在属性中找到IsMdiContainer选项,设置为True 2、添加MDI子窗体,在项目中依次选择添加-窗体,然后一直默认即可  添加后的项目目录(Form1为父窗口,Form2、Form3为子窗口)  3、在Form1.cs中,创建对应MDI子窗口的对象并调用显示出来 保存

    2024年02月08日
    浏览(50)
  • Winform中实现会旋转的Label控件

    2024年02月07日
    浏览(39)
  • 【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox

    .sln文件 :解决方案文件 位置引用 bin文件夹 : 存放项目的编译结果 exe dll debug 调试 release 发布 pdb 位置信息–调试 obj文件夹 object 编译过程中生成的中间临时文件 加快编译速度 Properties 引用 添加引用 --选择需要的程序集 App.config 配置文件 .csproj 项目文件 位置引用 双击打开

    2024年02月08日
    浏览(51)
  • C# Winform无边框窗体实现界面拖动

    C# Winform无边框窗体实现界面拖动

    2024年02月07日
    浏览(47)
  • C# winform窗体全屏显示设置

    窗体全屏显示,并覆盖桌面任务栏。 全屏显示后,如果拖拽标题栏,会使窗体全屏失效(如果禁用了最大话按钮),为了解决这样的问题,需要设置“标题栏移动”属性:

    2024年02月16日
    浏览(63)
  • C#之基于winform窗体绘制简单图形

    什么是窗体? 可以理解为是一个自定义的控制台应用程序。 假如需要仅仅是用vs制作游戏的话,那么vs中,我们平时所用到的控制台应用程序所呈现的窗口时远远不够用的。因此需要自定义窗体。 因此在新建项目时,我们不能再使用控制台应用程序,而是应该选择窗体: 之

    2023年04月16日
    浏览(42)
  • C# Winform 多进程窗体间传值->SendMessage()

    在 C# 的 Windows Forms 中,使用 Windows API 的 SendMessage 方法可以实现窗口间的消息通传递,当然也可以在不同的进程之间发送消息。接下来,我将为您提供一个基本的示例,演示如何使用 SendMessage 以及如何重写 WndProc 方法来接收并处理消息。 首先,你需要添加对Windows API的引用:

    2024年02月14日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包