自己写了个类,可以实现窗口大小发生改变时,窗口内的控件大小也随之改变(等比例),
不过调用要有点小技巧,后面再说,类的代码如
/// <summary>
/// 窗口控件大小变化随窗口等比变化
/// </summary>
public class MyResize
{ /// <summary>
/// 记录改变前窗口的大小
/// </summary>
Size originalSize;
/// <summary>
/// 记录改变前窗口的大小
/// </summary>
public Size OriginalSize { get => originalSize; set => originalSize = value; }
/// <summary>
/// 在水平方向上的比例
/// </summary>
float Xratio = 1;
/// <summary>
/// 在垂直方向上的比例
/// </summary>
float Yratio = 1;
/// <summary>
/// MyResize类实例化
/// </summary>
public MyResize(Form f)
{
OriginalSize = f.Size;
}
private MyResize()
{
///不允许无参构造
}
/// <summary>
/// 根据窗口大小,自动调整控件大小,不支持容器的子控件!
/// </summary>
/// <param name="f1">要调整的窗口</param>
/// <returns></returns>
public void Resize(Form f1)
{
Xratio = (float)f1.Size.Width / (float)originalSize.Width;
Yratio = (float)f1.Size.Height / (float)originalSize.Height;
foreach (Control a in f1.Controls)
{
a.Size = new Size((int)(a.Size.Width * Xratio), (int)(a.Size.Height * Yratio));
a.Location = new Point((int)(a.Location.X * Xratio), (int)(a.Location.Y * Yratio));
}
originalSize = f1.Size;
}
调用的话,声明应该要声明全局的,但实例化要在函数内,一般可以在构造函数中,也可以在窗口的Load事件中都行,但声明的时候不能直接实例化(当然,如果你能在方法外使用this关键字的话可能就可以),下面是一个调用的例子: TP:为了方便使用,我将它弄成了类库(虽然只是有个类 — . —)。
版权声明:本文为a50059074原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。