C# Winform 实现控件自适应父容器大小的示例代码

作者:lcsyhh 时间:2021-06-15 20:00:52 

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


/// <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;
   };
 }

来源:https://blog.csdn.net/lcsyhh/article/details/112371843

标签:C#,Winform,容器
0
投稿

猜你喜欢

  • C#中判断本地系统的网络连接状态的方法

    2023-07-02 15:39:41
  • Java8 CompletableFuture详解

    2023-09-16 12:34:54
  • C# TabControl控件中TabPage选项卡切换时的触发事件问题

    2022-10-30 08:11:13
  • spring boot 打包jar jar没有主目录清单问题的完美解决方法

    2021-08-28 16:07:39
  • Java实现按行读取大文件

    2022-11-05 13:56:57
  • Java中List使用stream流转成map的几种方式详解

    2022-07-31 21:46:12
  • java 解决Eclipse挂掉问题的方法

    2023-02-19 14:05:55
  • 详谈hibernate,jpa与spring data jpa三者之间的关系

    2022-08-04 22:35:57
  • JAVAsynchronized原理详解

    2023-05-17 12:18:32
  • Java用数组实现循环队列的示例

    2022-06-26 15:09:48
  • C#中使用jieba.NET、WordCloudSharp制作词云图的步骤

    2022-02-10 19:38:49
  • C#常用数据结构和算法总结

    2021-10-31 22:05:29
  • Spring-Security实现登录接口流程

    2023-03-24 05:35:40
  • C# 修改文件的创建、修改和访问时间的示例

    2023-06-09 23:18:50
  • Java求最小生成树的两种算法详解

    2023-11-10 07:21:24
  • java开发实现订阅到货通知帮我们买到想买的东西

    2022-05-01 18:55:11
  • java虚拟机内存溢出及泄漏实例

    2023-11-27 15:22:06
  • 关于后端如何解决跨域的问题说明

    2023-09-19 00:59:10
  • java&javascript自定义加密数据传输代码示例

    2021-11-29 02:09:33
  • 浅谈Synchronized和Lock的区别

    2023-10-26 04:28:33
  • asp之家 软件编程 m.aspxhome.com