Introduction
今天在调整窗体中控件的布局时,遇到了一个问题。我将问题抽象地描述成这样:窗体上有两个button,其中btnRight控件Dock到窗体的右侧,btnFill要填充剩余的空间,这两个button之间用一个splitter来调整它们的宽度。
Details
我们先将这三个控件放到窗体上,并重新命名,如下图所示。

然后,在属性页中分别设置btnRight.Dock=Right,btnFill.Dock=Fill,splitter1.Dock=Right。

完成之后我们发现,这并不是我们想要的效果。btnFill填充了整个窗体的空间,而不是剩余的空间。Splitter1也跑到了最右侧,而不是中间。我想也有相当多的初学者遇到同类的问题。今天我们就来解决它。(这三个控件拖放到窗体上的先后顺序不同,在实际操作中效果会有差异)
我们在代码编辑器中,展开“窗体设计器生成的代码”部分,可以看到类似下面的代码。
this.Controls.Add(this.btnRight);
this.Controls.Add(this.btnFill);
this.Controls.Add(this.splitter1);
我们试一下调整这三个控件添加的先后顺序,如下所示
this.Controls.Add(this.btnFill);
this.Controls.Add(this.splitter1);
this.Controls.Add(this.btnRight);
然后再切换到窗体设计器视图,如下所示

原来问题的根源就在这个地方。一个容器中,各个子控件的添加顺序不同,界面的表现形式就会不同。但随之又产生了一个新的问题,就是:为了得到我们想要的控件布局效果,我们一定要通过改变代码来实现吗?而且Visual Studio .Net编辑器并不推荐我们手工修改这部分的代码,我们在代码段中都看到过这样的注示:
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
解决的办法是有的。还记得在“窗体设计器”视图中,当我们右键点击附某个控件时,出的来的菜单吧。其中有两项“置于顶层”和“置于底层”,这个功能就是用来调整容器中子控件添加的先后顺序。
我们来试着操作一下,果然很方便。哈哈,以后遇见这样的问题就难不住我们了。如下所示

常在博客园中见到技术方面的好文,我也总有写一些的冲动。那就先从小文做起吧,做为第一篇文章,这里涉及的技术含量不高,但我也下了一番功夫,图文并茂,能为读者在阅读上提供方便。文章风格上模仿http://www.codeproject.com,这是一个C#开发者不可不去的网站,强烈推荐。
浙公网安备 33010602011771号