C# Winform 实现控件自适应父容器大小的示例代码
作者:lcsyhh 发布时间:2021-06-15 20:00:52
标签: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;
};
}
来源:https://blog.csdn.net/lcsyhh/article/details/112371843


猜你喜欢
- 简介本文用示例介绍SpringMVC如何通过JSON格式传递入参。JSON格式使用post方式来请求,即:对应的注解为:@PostMappi
- 这几天做项目,有些地方的图片需要用到圆形图片,所以百度了一下,在github上找到一个开源项目,处理很简单,效果如下:使用起来特别简单,一共
- 小背景:我们公司项目中的小脚本是一些工具类,比如常用的是MapUtil工具类的一些方法写公司的MapUtil工具类的方法要注意,方法名的命名
- 类锁和对象锁是否会冲突?对象锁和私有锁是否会冲突?通过实例来进行说明。一、相关约定为了明确后文的描述,先对本文涉及到的锁的相关定义作如下约定
- 背景最近好几个项目在运行过程中客户都提出文件上传大小的限制能否设置的大一些,用户经常需要上传好几个G的资料文件,如图纸,视频等,并且需要在上
- 本文实例讲述了C#通过指针读取文件的方法。分享给大家供大家参考。具体如下:// readfile.cs// 编译时使用:/unsafe//
- // Create a handler for a click event.button1.Click += delegate(System
- java中初始化MediaRecorder实现代码:private boolean initializeVideo() { &
- MyBatis-Plus不使用数据库默认值的问题有时候我们在设计数据表时希望某些字段使用默认值,比如create_time、和update_
- 本文实例为大家分享了Android实现长截屏功能的具体代码,供大家参考,具体内容如下1、MainActivitypublic class M
- 涉及access_token的获取请参考《C#微信公众平台开发之access_token的获取存储与更新》一、为了实现高级群发功能,需要解决
- 1. 测试文档、期望达到的目标文档效果用于测试的Word文档如下所示,包含的空白段落影响文章整体布局及美观性:目标文档效果:2. 辅助工具2
- 案例简述通过C#使用类似QQ窗体的功能,当窗体放置到屏幕的边缘,可以将窗体隐藏,当鼠标再次放置到屏幕边缘时,窗体可再次显示。预备知识导图功能
- 本文实例为大家分享了Android实现时钟特效的具体代码,供大家参考,具体内容如下效果展示:功能介绍:如果您想换一张背景图,可以点击左下角按
- SpringBoot 如何进行参数校验在日常的接口开发中,为了防止非法参数对业务造成影响,经常需要对接口的参数做校验,例如登录的时候需要校验
- 目录Java 中线程池创建的几种方式🐱🏍Executors 工厂方法创建👏 new ThreadPoolExecutor() 自
- 1、设置ssh安装ssh相关软件包:sudo apt-get install openssh-client openssh-server然后
- 关于死信队列在大多数的MQ中间件中,都有死信队列的概念。死信队列同其他的队列一样都是普通的队列。在RabbitMQ中并没有特定的“死信队列”
- 一、Lombok从上一篇博客可看出,DAO接口类的编写变得简单,反过来看模型,编写还需要(私有属性、setter...getter...方法
- jwt介绍: JWT是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范