根据提供的文件信息,我们可以归纳出该段代码主要关注于C#窗体及其控件的位置与大小的变化处理。接下来,我们将详细解析这些知识点。 ### C#窗体变动代码概述 这段代码涉及到了C#窗体(Form)在尺寸发生变化时如何调整其内部控件的位置和大小。这种动态调整对于保持用户界面的布局一致性和美观性非常关键,特别是在不同分辨率或窗口大小的情况下。 ### 数据成员定义 我们来看几个关键的数据成员定义: 1. **`InitialCrl`**:这是一个`ArrayList`类型的变量,用于存储窗体上所有控件的初始状态。 2. **`CrlLocationX` 和 `CrlLocationY`**:这两个`ArrayList`分别用来记录控件的初始横纵坐标。 3. **`CrlSizeWidth` 和 `CrlSizeHeight`**:同样地,这两个数组列表分别记录控件的初始宽度和高度。 4. **`FormSizeWidth` 和 `FormSizeHeight`**:这两个整型变量用于记录窗体本身的初始宽度和高度。 5. **`FormSizeChangedX` 和 `FormSizeChangedY`**:两个双精度浮点型变量,用于记录窗体尺寸变化时横纵方向上的变化量。 6. **`Wcounter`**:一个整型变量,用于某些计数逻辑。 ### 方法实现 #### `GetInitialFormSize()` 此方法用于获取窗体的初始宽度和高度,并将其赋值给`FormSizeWidth`和`FormSizeHeight`。这一步骤为后续窗体尺寸变化时的逻辑处理提供了基准数据。 #### `GetAllCrlLocation(Control CrlContainer)` 这个方法通过递归的方式遍历窗体中的所有控件,并将它们的位置信息(横纵坐标)存储到`CrlLocationX`和`CrlLocationY`数组列表中。这样,在窗体尺寸发生变化时可以依据这些初始位置信息来恢复控件的位置。 #### `GetAllCrlSize(Control CrlContainer)` 同上,该方法也是递归遍历控件,但这次是获取控件的初始尺寸(宽度和高度),并将其存储到`CrlSizeWidth`和`CrlSizeHeight`数组列表中。这对于窗体尺寸变化后恢复控件的尺寸非常重要。 #### `ProductMain_SizeChanged(object sender, EventArgs e)` 这是窗体尺寸变化事件的处理函数。当窗体尺寸发生变化时会触发该事件。在此方法中,首先判断窗体的新尺寸是否小于初始尺寸,如果是,则遍历`InitialCrl`数组列表,恢复每个控件的原始位置和尺寸;如果新尺寸不小于初始尺寸,则关闭自动滚动功能,并调用`ResetAllCrlState`方法重新设置所有控件的状态。 #### `ResetAllCrlState(Control CrlContainer)` 这个方法的完整代码未给出,但从上下文可以推测它应该负责在窗体尺寸增大时重新计算并设置所有控件的位置和尺寸,确保控件之间的相对位置不变且适应新的窗体尺寸。 ### 总结 以上就是从给定的代码片段中提取的主要知识点。这些代码展示了如何在C#中处理窗体尺寸变化时的控件布局问题。通过记录控件的初始位置和尺寸,并在窗体尺寸变化时根据这些信息来恢复或调整控件的状态,可以有效保证用户界面的一致性和用户体验的流畅性。
private ArrayList InitialCrl = new ArrayList();//用以存储窗体中所有的控件名称
private ArrayList CrlLocationX = new ArrayList();//用以存储窗体中所有的控件原始位置
private ArrayList CrlLocationY = new ArrayList();//用以存储窗体中所有的控件原始位置
private ArrayList CrlSizeWidth = new ArrayList();//用以存储窗体中所有的控件原始的水平尺寸
private ArrayList CrlSizeHeight = new ArrayList();//用以存储窗体中所有的控件原始的垂直尺寸
private int FormSizeWidth;//用以存储窗体原始的水平尺寸
private int FormSizeHeight;//用以存储窗体原始的垂直尺寸
private double FormSizeChangedX;//用以存储相关父窗体/容器的水平变化量
private double FormSizeChangedY;//用以存储相关父窗体/容器的垂直变化量
private int Wcounter = 0;//为防止递归遍历控件时产生混乱,故专门设定一个全局计数器
/****************************************************************************************************************/
/// <summary>
/// 获得并存储窗体的初始尺寸
/// </summary>
public void GetInitialFormSize()
{
FormSizeWidth = this.Size.Width;
FormSizeHeight = this.Size.Height;
}
/// <summary>
/// 获得并存储窗体中各控件的初始位置
/// </summary>
/// <param name="CrlContainer"></param>
public void GetAllCrlLocation(Control CrlContainer)
{
{
if (iCrl.Controls.Count > 0)
GetAllCrlLocation(iCrl);
InitialCrl.Add(iCrl);
CrlLocationX.Add(iCrl.Location.X);
CrlLocationY.Add(iCrl.Location.Y);
}
}
/// <summary>
/// 获得并存储窗体中各控件的初始尺寸
/// </summary>
/// <param name="CrlContainer"></param>
public void GetAllCrlSize(Control CrlContainer)
{
foreach (Control iCrl in CrlContainer.Controls)
{
if (iCrl.Controls.Count > 0)
GetAllCrlSize(iCrl);
CrlSizeWidth.Add(iCrl.Width);
CrlSizeHeight.Add(iCrl.Height);
}
}
private void ProductMain_SizeChanged(object sender, EventArgs e)
{
// MessageBox.Show("窗体尺寸改变");
剩余5页未读,继续阅读
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 学校课程软件工程常见10道题目以及答案demo
- javaweb新手开发中常见的目录结构讲解
- 新手小白的git使用的手册入门学习demo
- 基于Java观察者模式的info-express多对多广播通信框架设计源码
- 利用python爬取豆瓣电影评分简单案例demo
- 机器人开发中常见的几道问题以及答案demo
- 基于SpringBoot和layuimini的简洁美观后台权限管理系统设计源码
- 实验报告五六代码.zip
- hdw-dubbo-ui基于vue、element-ui构建开发,实现后台管理前端功能.zip
- (Grafana + Zabbix + ASP.NET Core 2.1 + ECharts + Dapper + Swagger + layuiAdmin)基于角色授权的权限体系.zip