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,容器
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
C#中判断本地系统的网络连接状态的方法
2023-07-02 15:39:41
![](https://img.aspxhome.com/file/2023/7/84457_0s.jpg)
Java8 CompletableFuture详解
2023-09-16 12:34:54
C# TabControl控件中TabPage选项卡切换时的触发事件问题
2022-10-30 08:11:13
![](https://img.aspxhome.com/file/2023/9/85739_0s.png)
spring boot 打包jar jar没有主目录清单问题的完美解决方法
2021-08-28 16:07:39
![](https://img.aspxhome.com/file/2023/9/65149_0s.png)
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
![](https://img.aspxhome.com/file/2023/9/76479_0s.jpg)
JAVAsynchronized原理详解
2023-05-17 12:18:32
![](https://img.aspxhome.com/file/2023/8/80318_0s.png)
Java用数组实现循环队列的示例
2022-06-26 15:09:48
C#中使用jieba.NET、WordCloudSharp制作词云图的步骤
2022-02-10 19:38:49
![](https://img.aspxhome.com/file/2023/3/85743_0s.png)
C#常用数据结构和算法总结
2021-10-31 22:05:29
![](https://img.aspxhome.com/file/2023/6/69206_0s.png)
Spring-Security实现登录接口流程
2023-03-24 05:35:40
![](https://img.aspxhome.com/file/2023/4/70334_0s.png)
C# 修改文件的创建、修改和访问时间的示例
2023-06-09 23:18:50
Java求最小生成树的两种算法详解
2023-11-10 07:21:24
![](https://img.aspxhome.com/file/2023/6/59246_0s.png)
java开发实现订阅到货通知帮我们买到想买的东西
2022-05-01 18:55:11
![](https://img.aspxhome.com/file/2023/6/77366_0s.png)
java虚拟机内存溢出及泄漏实例
2023-11-27 15:22:06
关于后端如何解决跨域的问题说明
2023-09-19 00:59:10
![](https://img.aspxhome.com/file/2023/7/79967_0s.jpg)
java&javascript自定义加密数据传输代码示例
2021-11-29 02:09:33
浅谈Synchronized和Lock的区别
2023-10-26 04:28:33