winfrom窗体的Anchor属性、Dock属性

转载 2015年07月09日 15:11:15

转载自http://blog.sina.com.cn/s/blog_7f7cd96601013trt.html

    

                     winform中控件的dock和anchor属性用来调整控件的大小和位置,在父窗体大小变化时。

Anchor属性


正如名称暗示的那样,这个属性迫使控件将其自身定位在父窗体或父控件中的某个相对或绝对位置。这个属性有四个可以开启或关闭的值:


  • Top——表示控件中与父窗体(或父控件)相关的顶部应该保持固定。
  • Bottom——表示控件中与父窗体(或父控件)相关的底边应该保持固定。
  • Left——表示控件中与父窗体(或父控件)相关的左边缘应该保持固定。
  • Right——表示控件中与父窗体(或父控件)相关的右边缘应该保持固定。


要对一个控件设置Anchor属性,只需在Visual Studio设计器中选择控件,然后转到属性窗口。你会看到一个标注为“Anchor”的属性。点击这个属性值的部分,会出现一个小窗口让你选择想要赋予控件的锚点。图表A所示是选择了“顶边、左边”的anchor设置窗口。图表B所示是选择了“底边、右边”的窗口。


图表A

Anchor工具顶部和左边


图表B

Anchor工具底部和右边


在Visual Studio中,当控件放置于窗体时,默认的anchor设置是“顶部、左边”,这使得控件和窗体的顶边和左边缘固定相关。


到真正发现不同的anchor设置对控件的影响时,你才能体会到锚定的意义。下面的图像会有所帮助。


图表C

小窗口


图表C所示是一个有十个子控件的窗体。每一个子控件都有不同的Anchor属性值,并用它的anchor设置标注。灰白色控件后面的深红色框是另一个子控件——它的Anchor属性被设为顶部、底部、左边和右边。图表D所示是区域被调大以后的同一个窗体。


图表D

大窗口


正如你所看到的那样,每一个控件在父窗体中都自动地保持它的位置。我们没有编写代码来完成这一点;只是简单地设置了控件的Anchor属性。


有几个重要的地方不得不提。一个就是如果你没有指定一个控件有左或右锚定,它将在父窗体中保留一个相对左/右位置。如果你没有指定一个控件是否有顶部或底部锚定,也是一样的。对于这一点,一个很好的例子就是标注为“无Anchor”的控件。这样的控件没有锚定值,所以它只是漂浮在窗体中央。


另一个极端就是选择了所有anchor值的控件(顶部、底部、左边、右边)。对这一点,图表C图表D中其它控件后面的深红色方形可见物就是一个例子。当选择了所有的anchor值时,控件只是在调整父窗体大小时,随着增大和收缩——与窗体的边缘比较起来它的所有边缘保持静止不变。


Dock属性


Dock属性迫使控件紧贴父窗体(或控件)的某个边缘。虽然Anchor属性也可以实现这一点,但是dock属性使得你能够在父窗体中让子窗体可以在上方(或旁边)互相“堆叠”。如果某个子窗体改变了大小,其它停驻在它旁边的子窗体也会随之改变。


和Anchor属性不同的是,你可以将Dock属性设置为一个单值。有效值如下所示:


  • Top——迫使控件位于父窗体(或控件)的顶部。如果有同一个父窗体的其它子控件也被设置为停驻在顶部的话,那么控件将在彼此上方相互堆叠。
  • Bottom——迫使控件位于父窗体(或控件)的底部。如果有同一个父窗体的其它子控件也被设置为停驻在底部的话,那么控件将在彼此上方相互堆叠。
  • Left——迫使控件位于父窗体(或控件)的左边。如果有同一个父窗体的其它子控件也被设置为停驻在左边的话,那么控件将在彼此旁边相互堆叠。
  • Right——迫使控件位于父窗体(或控件)的右边。如果有同一个父窗体的其它子控件也被设置为停驻在右边的话,那么控件将在彼此旁边相互堆叠。
  • Fill——迫使控件位于父窗体(或控件)的上方。如果有同一个父窗体的其它子控件也被设置为停驻在上方的话,那么控件将在彼此上方相互堆叠。
  • None——表示控件将会正常运转。


要设置一个控件的Dock值,选择Visual Studio中的控件,然后转到属性窗口。你会看到一个标注为“Dock”的属性。点击这个属性的值的部分,会出现一个小窗口让你指定该控件将如何停驻。被赋予各种值的该窗体将显示在以下图像中(图表E、图表F和图表G):


图表E

选择停驻左边


图表F

选择停驻填充


图表G

选择停驻顶部


和Anchor属性一样,直到发现它起了作用,你才会意识到它们的重要意义。图表H所示的是一个有5个子控件的窗体,每个子窗体都设置了不同的dock值。


图表H

有不同dock值的5个子控件


图表I所示的是和图表H一样的窗口,除了一点,就是现在窗口已经被调整为更大的轨迹。


图表I

更大的轨迹


图表J又显示的是和图表H一样的窗口,这次不同的是位于窗体底部、顶部、左边和右边的控件变小了。注意位于窗体中间被设置为dock Fill的控件,自动变大了。


图表J

更小的轨迹


需要记住的是,对于Dock属性,添加控件的顺序会影响它们停驻的方式。例如,如果你对窗体添加控件A,指示其停驻填充,然后你对窗体添加控件B并指示其停驻顶部,控件B将覆盖控件A的上部。原因就是控件B被认为是在控件A的“前方”,因为它是在控件A之后添加的。


要解决这种情况,你必须在Visual Studio中右击控件A,并在上下文菜单中选择“放到前面(Bring To Front)”。这样就能使控件A出现在控件B的前方,控件也就能像预期的那样运作了。




C#中Dock属性的作用

当在C#项目开发中,在窗体界面的设置经常用到Dock属性值。这里一panel面板的Dock属性值为例描述其作用。 当容器中的控件的Dock属性设置为Fill时,可能会覆盖其他Dock属性为Top,B...
  • qq_30507287
  • qq_30507287
  • 2016年05月20日 20:32
  • 3129

WPF中如何通过代码设置DockPanel.Dock属性

DockPanel.SetDock(myBorder1, Dock.Top); WPF中没法通过DockPanel实例或者是控件实例来设置这个属性, 只能使用DockPanel类来设置,官方文档...
  • u014613150
  • u014613150
  • 2017年06月12日 11:30
  • 590

Dock属性的使用

dock属性使用起来很方便,可以使窗体更加富有思想eg.private void pictureBox2_Click(object sender, EventArgs e)        {     ...
  • meixiaoqiang
  • meixiaoqiang
  • 2009年07月03日 09:07
  • 896

WinForm控件Anchor属性和Dock属性的区别

有一点让许多刚接触WinForms编程的开发者感到很棘手,就是在用户调整各种控件的大小时,怎样使它们的窗体保持同步,并与父窗体相称。这可以成为一种让人非常沮丧的情况,尤其是对于有着Web编程背景,转为...
  • linybo
  • linybo
  • 2014年06月30日 10:41
  • 1538

【C#】用组件的Anchor属性解决最大化组件的缩放问题

如果不对组件进行任何设置,同时也不禁用C#窗体的最大化按钮,设置Form1不可调整,在Form1最大化之后,默认是如下图的效果: 这显然不符合大多数的审美,其实只要全选所有组件,不包含窗体,设置...
  • yongh701
  • yongh701
  • 2015年11月29日 11:46
  • 3569

让 Anchor 属性拥有设计时行为

用过 vfp9 的人都知道这个好用的新属性,宿主控件大小变化时,其内部控件可以用这个属性来自动调整它们的位置和大小,不用再像 vfp6 中要写代码来调整;不过,大家也看到了,这个属性只是一个运行时行为...
  • dkfdtf
  • dkfdtf
  • 2017年01月31日 23:26
  • 542

FORM窗体 控件设置DOCK属性问题

在做程序的过程中,后加进来的控件设置了DOCK 属性,本来想让它在最上面,但却被其他别的设置了DOCK属性的控件给覆盖了。怎么半??? 有办法,其实非常简单: 选中控件,右键菜单中进行“置于底层”的操...
  • LoveCleverDog
  • LoveCleverDog
  • 2008年01月05日 16:11
  • 834

WinForm控件Anchor属性和Dock属性的区别

有一点让许多刚接触WinForms编程的开发者感到很棘手,就是在用户调整各种控件的大小时,怎样使它们的窗体保持同步,并与父窗体相称。这可以成为一种让人非常沮丧的情况,尤其是对于有着Web编程背景,转为...
  • linybo
  • linybo
  • 2014年06月30日 10:41
  • 1538

C# 界面布局之Dock,Anchor,容器控件心得

背景 近几个月都用的WPF,结果发现很多代码都是WinFrom的,一直想学下WinForm的,恰好今天要用下。就拿了别人的源码,增加些控件与功能,然后界面不太规范,所以边学边改之,第一天弄WinFo...
  • rentao315
  • rentao315
  • 2015年01月26日 11:25
  • 6296

【C#】用组件的Anchor属性解决最大化组件的缩放问题

如果不对组件进行任何设置,同时也不禁用C#窗体的最大化按钮,设置Form1不可调整,在Form1最大化之后,默认是如下图的效果: 这显然不符合大多数的审美,其实只要全选所有组件,不包含窗体,设置...
  • yongh701
  • yongh701
  • 2015年11月29日 11:46
  • 3569
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:winfrom窗体的Anchor属性、Dock属性
举报原因:
原因补充:

(最多只允许输入30个字)