导航

如何在C#中调整控件的布局(原创)

Posted on 2004-04-28 15:06  yinzx  阅读(6187)  评论(8)    收藏  举报

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#开发者不可不去的网站,强烈推荐。