1.4.2 Dock属性
当我们具有一组控件,并需要定义它们的大小改变行为时,使用Anchor属性是很合适的。但是,如果我们想尽可能地利用窗体的空间,Anchor属性就不怎么合适了。尽管我们可以把控件放在窗体的边缘,并把它锚定到各个边缘,但这并不是最优雅的解决方案。相比之下,Dock属性是专门为这个目的而设计的。
Dock属性与Anchor有一定的关联,它也用于影响窗体上控件大小的改变。在前面用绳子把小艇固定到浮动码头的比喻中,小艇本身“停靠”在岸边,因为不管水面如何涨落,它总是位于湖边。类似地,Dock属性确定了一个控件在它的容器中的位置,并把它固定到窗体的某个边缘上。
和Anchor属性一样,Dock属性也使用枚举值,也就是DockStyle枚举。注意,AnchorStyles枚举是复数形式,因为1个控件可以具有多个锚定设置,但DockStyle枚举是单数形式,因为1个控件只有具有1个停靠值。.NET表格1-4列出了这个枚举的更多细节。
我们可以看到Dock属性是如何工作的,它替换了程序中的那行pbxPhoto.Anchor代码,用一个Dock设置使那个PictureBox控件填充整个窗体。另外,我们把程序的版本号修改为1.5(此处并未显示):
pbxPhoto.Top = (this.Height - pbxPhoto.Height) / 2; |
再次编译和运行这个程序。在加载了一幅图像之后,窗体应该像图1-7这样。注意,Load按钮仍然可见,因为它是首先添加到窗体中的,因此它的Z顺序高于那幅图像。
![]() |
注意,如果多个控件被设置为相同的Dock值,这些控件的Z值将决定哪个控件将被停靠。Z顺序堆栈的顶部(或第1个)控件将被固定到停靠边缘上。下一个控件将停靠到第1个控件上,接下来以此类推。唯一的例外是DockStyle. Fill值。在这种情况下,控件依次叠在其他控件的顶部,Z顺序决定了哪个控件可见。
![]() |
尝试一下
修改控件添加到窗体中的顺序,首先添加PictureBox控件,然后再添加Button控件,更改按钮和图片框的Z顺序。这将导致按钮被隐藏在图像框后面,不再可见。但是,这个按钮仍然存在,我们可以使用快捷键Alt + L来加载图像。
这个时候,读者可以尝试一下把这个Button控件的Dock属性更改为DockStyle.Top。它是如何影响应用程序窗口的?这些控件的Z顺序是如何影响它们在窗体中的位置的?当然,读者也可以试试其他的Dock设置。
我们在本书中大量使用了Dock和Anchor属性,因此读者将会看到使用这2个属性的更多例子。
| 回书目 上一节 下一节 |