C#Winform 实现控件自适应父容器大小

C#Winform 实现控件自适应父容器大小

在日常开发中经常遇到控件不能随着父容器大小的改变而且自动改变控件的所在位置和大小。以下是实现的代码

	/// <summary>
    /// 根据父容器实现控件自适应大小位置
    /// </summary>
    /// <param name="control">所需自适应大小位置的控件</param>
    private void ChangeLocationSizeByParent (Control control)
    {
        //记录父容器大小,来判断改变控件大小位置是因为父容器的改变还是通过设置控件大小位置去改变
        Size parentOldSize = control.Parent.Size;

        PointF locationPF = new PointF();
        locationPF.X = (float)control.Location.X / (float)control.Parent.Width;
        locationPF.Y = (float)control.Location.Y / (float)control.Parent.Height;
        
        PointF sizePF = new PointF();
        sizePF.X = (float)control.Width / (float)control.Parent.Width;
        sizePF.Y = (float)control.Height / (float)control.Parent.Height;

        control.LocationChanged += delegate (Object o, EventArgs e) {

            if (control.Parent != null&&parentOldSize.Equals(control.Parent.Size))
            {
                locationPF.X = (float)control.Location.X / (float)control.Parent.Width;
                locationPF.Y = (float)control.Location.Y / (float)control.Parent.Height;
               
            }
        };
        control.SizeChanged += delegate (Object o, EventArgs e) {

            if (control.Parent != null && parentOldSize.Equals(control.Parent.Size))
            {
                sizePF.X = (float)control.Width / (float)control.Parent.Width;
                sizePF.Y = (float)control.Height / (float)control.Parent.Height;
               
            }
        };
        control.ParentChanged += delegate (Object o, EventArgs e) {
            if (control.Parent == null)
            {
                return;
            }
            locationPF.X = (float)control.Location.X / (float)control.Parent.Width;
            locationPF.Y = (float)control.Location.Y / (float)control.Parent.Height;
            sizePF.X = (float)control.Width / (float)control.Parent.Width;
            sizePF.Y = (float)control.Height / (float)control.Parent.Height;
        };
        control.Parent.SizeChanged += delegate (Object po, EventArgs pe) {

            Control pControl = (Control)po;
            int x = (int)(pControl.Width * locationPF.X);
            int y = (int)(pControl.Height * locationPF.Y);
            control.Location = new Point(x, y);
            int width = (int)(pControl.Width * sizePF.X);
            int hetght = (int)(pControl.Height * sizePF.Y);
            control.Size = new Size(width, hetght);
            control.Refresh();
            parentOldSize = pControl.Size;
        };
    }

转发请注明出处

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过设置件的 Anchor 和 Dock 属性来实现 C# WinForm 自适应屏幕大小的效果。 Anchor 属性的作用是件在窗口大小改变时的位置和大小,可以通过设置 Anchor 属性为左上角、右下角等组合来实现件的自适应。例如,设置一个按钮的 Anchor 属性为左上角(Top, Left),那么当窗口大小改变时,按钮会始终保持在窗口的左上角。 Dock 属性的作用是让件填充满容器(如窗口),可以通过设置 Dock 属性为 Fill 来实现件的自适应。例如,设置一个面板的 Dock 属性为 Fill,那么当窗口大小改变时,面板会始终填充满整个窗口。 下面是一个简单的示例代码,演示了如何使用 Anchor 和 Dock 属性实现 C# WinForm 自适应屏幕大小的效果: ``` private void Form1_Load(object sender, EventArgs e) { // 设置窗口大小为屏幕大小的一半 this.Width = Screen.PrimaryScreen.WorkingArea.Width / 2; this.Height = Screen.PrimaryScreen.WorkingArea.Height / 2; // 设置一个按钮的 Anchor 属性为左上角 button1.Anchor = AnchorStyles.Top | AnchorStyles.Left; // 设置一个面板的 Dock 属性为 Fill panel1.Dock = DockStyle.Fill; } ``` 在上面的代码中,我们首先设置窗口的大小为屏幕大小的一半,然后设置了一个按钮的 Anchor 属性为左上角,以及一个面板的 Dock 属性为 Fill。当窗口大小改变时,按钮会始终保持在窗口的左上角,面板会始终填充满整个窗口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值