在进行Windows窗体应用开发中,为了实现界面的布局,难免会用到各种容器,有时候需要根据窗口大小改变,动态调整一些内容的大小,这时候就需要知道各级控件的属性更改顺序及事件响应顺序,否则,计算就可能出错。我利用splitContainer、Panel、chart做了一个试验,记录了窗口改变时,各控件属性变化顺序,以及SizeChanged事件的执行顺序:
1、控件的布置结构:
2、主要代码:
private void splitContainer1_SizeChanged(object sender, EventArgs e)
{
Console.WriteLine("L1:SizeChanged panel1.height=" + panel1.Height.ToString()+" chart1.width="+chart1.Width.ToString());
}
private void splitContainer2_SizeChanged(object sender, EventArgs e)
{
Console.WriteLine("L2:SizeChanged panel1.height=" + panel1.Height.ToString() + " chart1.width=" + chart1.Width.ToString());
}
private void panel1_SizeChanged(object sender, EventArgs e)
{
Console.WriteLine("L3:SizeChanged panel1.height="+panel1.Height.ToString() + " chart1.width=" + chart1.Width.ToString());
}
3、测试记录
进行一次全屏并恢复时的控制台记录:
L3:SizeChanged panel1.height=957 chart1.width=1277
L2:SizeChanged panel1.height=957 chart1.width=1277
L1:SizeChanged panel1.height=957 chart1.width=1277
L3:SizeChanged panel1.height=418 chart1.width=577
L2:SizeChanged panel1.height=418 chart1.width=577
L1:SizeChanged panel1.height=418 chart1.width=577
4、测试结论
在尺寸变化时,先更新各控件尺寸,然后发出尺寸改变事件,内层的先响应,再逐渐往外传递。
2021年5月1日