2008-09-16 100 views
10

我认为C#页边距属性的含义与CSS类似 - 控件外部的间距。但是,保证金价值似乎被忽略,无论我输入什么值。什么是.NET Control.Margin属性?

然后我读了SDK上:

在 停靠控制设置Margin属性对 距离其容器的边缘 控制无效。

鉴于我将控件放在窗体上,并且可能与它们对接,Margin属性给我带来了什么?

回答

5

您的控制主机(例如面板)使用的任何布局引擎都会使用该边距属性,无论该布局引擎认为合适。但是,它最好用于间隔,就像您所假设的那样。请阅读该特定布局引擎的文档。

例如,当使用FlowLayoutPanel或TableLayoutPanel时,它可以非常方便 - 或者减少默认填充或空间。显然,如果你写一个自定义布局提供者,你可以使用Margin,但是你认为合适。

8

就像Philip Rieck所说的,保证金属性只能由执行布局的容器控制器来遵守。这里,使得它相当明显的一个例子是怎么TableLayoutPanel方面Margin属性:

using System.Drawing; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

      TableLayoutPanel pnl = new TableLayoutPanel(); 
      pnl.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50)); 
      pnl.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50)); 
      pnl.Dock = DockStyle.Fill; 
      this.Controls.Add(pnl); 

      Button btn1 = new Button(); 
      btn1.Text = "No margin"; 
      btn1.Dock = DockStyle.Fill; 

      Button btn2 = new Button(); 
      btn2.Margin = new Padding(25); 
      btn2.Text = "Margin"; 
      btn2.Dock = DockStyle.Fill; 

      pnl.Controls.Add(btn1, 0, 0); 
      pnl.Controls.Add(btn2, 1, 0); 
     } 
    } 
}

我相信,尊重这个属性唯一的.NET 2.0内置控件是FlowLayoutPanelTableLayoutPanel;希望第三方组件也会尊重它。在其他情况下基本没有影响。

0

如果您不使用布局容器,而是手动放置控件,则Control.Margin属性在设计时也可能非常有用。

它影响手动拖动控件之间的距离,其中snaplines appear

E.g.为文本框的3预设保证金价值,你会有这样对齐线:

enter image description here

并为10余量 - 这些(标有三缘在这两种情况下):

enter image description here

因此,如果您对UI有一些严格的指导方针,那么您只需根据需要设置边距,然后将控件拖至抓线。