首页 > 其他分享 >Winform控件自适应窗体大小

Winform控件自适应窗体大小

时间:2023-08-16 18:22:34浏览次数:303  
标签:Control 控件 Convert Tag 窗体 Winform ToInt32 con

思路[参考他人]:

1>保存窗体的初始宽度和高度;

2>保存窗体内所有控件的初始宽度,初始高度和坐标;

3>窗体的Resize事件触发时,计算新的Size和初始Size的比例prec;

4>遍历窗体内所有控件,将其的Size和坐标乘以prec;

代码:

窗体注册,保存窗体及其所有控件的初始尺寸,编写Resize事件逻辑:

public static void Register(Control con)
{
    SetFlag(con);
    con.Tag = con.Width + ";" + con.Height + ";" + con.Top + ";" + con.Left;
    con.Resize += (object sender, EventArgs e) =>
    {
        Control c = (sender as Control);
        int initX = Convert.ToInt32(c.Tag.ToString().Split(';')[0]);
        int initY = Convert.ToInt32(c.Tag.ToString().Split(';')[1]);
        float x = c.Width / initX;
        float y = c.Width / initY;
        ReControlSize(x, y, c);
    };
}

SetFlag函数:

static void SetFlag(Control con)
{
    foreach (Control c in con.Controls)
    {
        c.Tag = c.Width + ";" + c.Height + ";" + c.Top + ";" + c.Left;
        SetFlag(c);
    }
}

ReControlSize函数:

static void ReControlSize(float x,float y,Control obj)
{
    foreach (Control con in obj.Controls)
    {
        if (con.Tag == null)
            continue;
        string[] tags = con.Tag.ToString().Split(';');
        con.Width = Convert.ToInt32(Convert.ToSingle(tags[0]) * x);
        con.Height = Convert.ToInt32(Convert.ToSingle(tags[1]) * y);
        con.Top = Convert.ToInt32(Convert.ToSingle(tags[2]) * y);
        con.Left = Convert.ToInt32(Convert.ToSingle(tags[3]) * x);
        ReControlSize(x, y, con);
    }
}

  

  

标签:Control,控件,Convert,Tag,窗体,Winform,ToInt32,con
From: https://www.cnblogs.com/cfsl/p/17635897.html

相关文章

  • jquery.ui的bxslider控件在IE下使用的问题
    使用了 bxslider控件进行网页的切换。发现在firefox切换得很稳定,按照设置的切换时间进行切换。但是换成IE浏览器发现,却不是那么回事了。包括IE8和IE10.明明设置了30秒有的时候10分钟都不切换,本以为切换失灵了,结果又在第11分钟切换了。但是刷新页面再来一次,可能又变成5分钟后切换......
  • 多文件上传控件uploadify介绍
    在很多场合下,会用到文件的批量上传功能,这个对需要上传多个照片,图片或者文档的人来说,会省不少事情。而普通的id下面的file控件只能支持单个文件的上传,这个确实比较弱。所以介绍一种可以上传多个文件的js控件:基于jquery的uploadify。它结合了ajax和flash,实现了这个多线程上传的功能......
  • html5中的file控件支持多文件选择上传
    在前两天的博文中刚介绍了一款基于jquery的多文件上传控件uploadify,原理是基于flash达到上传效果的另外,还有一种基于隐藏iframe来实现多文件上传的方法(iframe中放一个form)。但是其实在Html5中,file控件已经支持多文件选择了。file控件元素支持多文件选择,其隐藏的玄机就是下面代码......
  • 控件
    按钮变色borderColor边框的颜色MouseDownBackColor鼠标悬浮在按钮上时边款的颜色MouseOverBackColor点击时的颜色把窗体嵌套在窗体里面先在页面画一个panel,再添加一个页面(form)设置无边框,大小和panel一样。上图为panel2 上图为无边框privatevoidOpenFrom(F......
  • 界面组件Telerik UI for WinForms R2 2023——拥有VS2022暗黑主题
    TelerikUIforWinForms拥有适用WindowsForms的110多个令人惊叹的UI控件。所有的UIforWinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。TelerikUIforWinFormsR22023于今年6月份发布,此版本中集成了备受期......
  • c# winform LED数字时间代码,纯代码
    主要功能:1、支持更改LED数字时间只显示日期2、支持更改LED数字时间只显示时间3、支持更改LED数字显示日期+时间4、支持更改LED数字时间控件的背景颜色5、支持更改LED数字时间的前颜色6、支持更改LED数字的大小位置图片展示: ......
  • winform窗体闪烁问题解决方式
    winform窗体闪烁问题解决方式1、使用窗体双缓冲SetStyle(ControlStyles.UserPaint|ControlStyles.AllPaintingInWmPaint|ControlStyles.OptimizedDoubleBuffer,true);UpdateStyles();窗体的DoubleBuffered 指示是否对控件进行双缓存处理。2、使用CreateParams的使用......
  • 【愚公系列】2023年08月 WPF控件专题 WPF应用程序组成
    (文章目录)<hrstyle="border:solid;width:100px;height:1px;"color=#000000size=1">一、WPF组成WindowsPresentationFoundation由两个主要部分组成:引擎和编程框架。1、WindowsPresentationFoundation引擎。WindowsPresentationFoundation(WPF)引擎是一个用于创建Wi......
  • Winform-控件美化小技巧
    提供一些日常控件美化的小技巧,复杂需求则需要扩展控件。⭐圆角按钮,渐变色按钮1>从PPT中选择圆角长方形形状,填充颜色渐变色,右击另存为png图片;2>按钮的BackColor设置为透明,BackGroundImage设置为刚才的图片,LayOut设为Stretch;3>按钮的FlatStyle设置为Flat,FlatAppearance的Borde......
  • C# WINFORM 屏幕绘画+透明窗体+鼠标穿透
    通过长时间研究终于找到关于在C#WINFORM下制作真正的透明窗体在系统桌面上画图的完美解决方案;可以避免解决与其网上其它画图工具的很多不足,网上实现思路如下几种:1、使用API透明窗体+底层鼠标钩子可以实现,但要重新实现鼠标的监听操作,实再太麻烦了;2、使用第三方透明窗体控件(如La......