首页 > 其他分享 >winfrom窗体比例缩放-

winfrom窗体比例缩放-

时间:2023-10-30 17:03:23浏览次数:29  
标签:控件 Convert 缩放 winfrom Tag 窗体 con

用于控件大小随窗体大小等比例缩放的C#代码。该代码可以在窗体重载中使用,以确保窗体中的控件在窗体大小改变时能够按比例缩放。

  • SetTag方法:该方法用于设置控件的Tag属性,以存储控件的宽度、高度、左边距、顶边距和字体大小等信息。
  • SetControls方法:该方法用于遍历窗体中的控件,并根据窗体缩放的比例重新设置控件的大小和位置。

封装缩放函数

/// <summary>
/// 定义当前窗体的宽度
/// </summary>
public static float X;
/// <summary>
/// 定义当前窗体的高度
/// </summary>
public static float Y;
/// <summary>
/// 控件大小随窗体大小等比例缩放,
/// 在窗体重载中使用
/// </summary>
/// <param name="cons"></param>
public static 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);
            }
        }
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="newx"></param>
    /// <param name="newy"></param>
    /// <param name="cons"></param>
public static void SetControls(float newx, float newy, Control cons)
{
    //遍历窗体中的控件,重新设置控件的值
    foreach(Control con in cons.Controls)
    {
        //获取控件的Tag属性值,并分割后存储字符串数组
        if(con.Tag != null)
        {
            string[] mytag = con.Tag.ToString().Split(new char[]
            {
                ';'
            });
            //根据窗体缩放的比例确定控件的值
            con.Width = Convert.ToInt32(System.Convert.ToSingle(mytag[0]) * newx); //宽度
            con.Height = Convert.ToInt32(System.Convert.ToSingle(mytag[1]) * newy); //高度
            con.Left = Convert.ToInt32(System.Convert.ToSingle(mytag[2]) * newx); //左边距
            con.Top = Convert.ToInt32(System.Convert.ToSingle(mytag[3]) * newy); //顶边距
            Single currentSize = System.Convert.ToSingle(mytag[4]) * newy; //字体大小
            con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
            if(con.Controls.Count > 0)
            {
                SetControls(newx, newy, con);
            }
        }
    }
}

窗体初始化时使用

// 在窗体重载方法中调用SetTag方法,设置控件的Tag属性
public ExeStart()
{
    InitializeComponent();
    MechForm.X = this.Width;
    MechForm.Y = this.Height;
    MechForm.SetTag(this);
}

在Resize事件加载中使用

在窗体大小改变事件中调用SetControls方法,重新设置控件的大小和位置

private void ExeStart_Resize(object sender, EventArgs e)
{
    float newX = this.Width / MechForm.X; //获取当前宽度与初始宽度的比例
    float newY = this.Height / MechForm.Y; //获取当前高度与初始高度的比例
    MechForm.SetControls(newX, newY, this);
}

标签:控件,Convert,缩放,winfrom,Tag,窗体,con
From: https://blog.51cto.com/u_12828212/8095464

相关文章

  • css图片宽高不同,缩放图片,保持宽高,注意最外层的盒子要用display:inline-flex
    <divclass="product"><Popoverplacement="right"><template#content><divclass="w-[200px]h-[200px]"><img:src=&......
  • RoadeSHI Winform-MDI窗体
    MDI窗体用于显示多个文档,每个文档显示在各自的窗口中1、设置MDI父窗体:IsMdiCintainer属性设置为true2、确定子窗体:用MdiParent属性来确定子窗体   如:frm2.MidParent=this; //设置MdiParent属性,将当前窗体作为frm2窗体的父窗体3、排列MDI子窗体:MdiLaout来指定......
  • 关于WinFrom的AOT尝试
       网上关于WinForm的AOT信息比较少,因为默认官方是无法直接发布出WinForm和wpf的AOT程序的,但是今天发现简书上有个帖子说可以,但是查看完整内容还要收费,这里查了些资料,做下笔记,也方便其他人研究。 实际WinForm的程序在.net7\8上是可以发布的,但是需要加入发布参数“_Suppre......
  • 【C#】【WinForm】MDI窗体
    MDI窗体的相关学习使用1、设置MDI父窗体 在属性中找到IsMdiContainer选项,设置为True2、添加MDI子窗体,在项目中依次选择添加->窗体,然后一直默认即可 添加后的项目目录(Form1为父窗口,Form2、Form3为子窗口) 3、在Form1.cs中,创建对应MDI子窗口的对象并调用显示出来1name......
  • c# winfrom 窗体传值的六种传值方式及实例
    1、通过构造函数特点:传值是单向的(不可以互相传值),实现简单实现代码如下:在窗体Form2中intvalue1;stringvalue2;publicForm2(intvalue1,stringvalue2){InitializeComponent();this.value1=value1;this.value2=value2;}在窗体Form1中这样调用1newForm2......
  • kde桌面不同分辨率的显示器设置不同缩放
    kde桌面不同分辨率的显示器设置不同缩放xrandr命令可以查看当前使用的显示器名称#!/bin/bash#你可以在kde设置里先把你的主显器分辨率缩放比例设置好。在运行下面的命令。并不会影响你设置里的分辨率。简单的讲下面的命令会按你设置里真是生成的分辨率去计算#设置eDP-1显示......
  • winform窗体程序的尺寸不对
    最近学习C#,在博客园找了WinForm的贪吃蛇来学习,结果一直发现窗体尺寸有问题。比如本来用的是800X600的Size,使用Graphics画格子就发现窗口没有全部显示这些格子,让我很疑惑,找了很久不知道为什么?网上看了有什么画面缩放的,我是百分百没缩放,最后我设置窗体的边框为none后,就好了,(感觉有......
  • 几何变换--1.图像缩放
    ......
  • C#实现鼠标进入按键范围后按键自动窗体内位置移动
    新建winform窗体程序添加button控件 在事件中选择MouseEnter 代码如下privatevoidbutton_MouseEnter(objectsender,EventArgse){//给按钮一个新的坐标//这个按钮活动的最大宽度就是窗体的宽度减去按钮的宽度intx=this.ClientSize.Width-button.Widt......
  • 解决winform调用wpf窗体时原窗体缩小的问题
    在使用winform调用wpf窗体时,原来的winform窗体会缩小,同时分辨率会发生变化,用如下方法来解决这个问题。方法一、首先找到winform项目中的Properties ==>AssemblyInfo.cs,打开该文件,在末尾加入如下代码,之后重新运行即可。[assembly:System.Windows.Media.DisableDpiAwareness]/......