什么是.NET Control.Margin属性?

时间:2008-09-16 19:03:50

标签: c# controls margin

我认为C#margin属性具有CSS中的含义 - 控件外部的间距。但是,对于我输入的值,似乎忽略了保证金价值。

然后我读了SDK:

  

在a上设置Margin属性   停靠控制对此没有影响   控制距离   它的容器边缘。

鉴于我正在对表单进行控制,并且可能将它们对接,Margin属性会给我带来什么?

3 个答案:

答案 0 :(得分:8)

就像Philip Rieck所说,只有执行布局的容器控件才能尊重margin属性。这是一个让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;希望第三方组件也尊重它。它在其他情况下基本没有效果。

答案 1 :(得分:5)

您的控件主机(例如,Panel)正在使用的任何布局引擎都会使用margin属性,无论布局引擎认为合适。但是,它最好用于间距,就像你假设的那样。只需阅读该特定布局引擎的文档。

例如,使用FlowLayoutPanel或TableLayoutPanel时,它可以非常方便地减少默认填充或空格。显然,如果您编写自定义布局提供程序,则可以使用Margin,但您认为合适。

答案 2 :(得分:0)

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

它影响snaplines appear的手动拖动控件之间的距离。

E.g。对于文本框的默认边距值为3,您将拥有此对齐线:

enter image description here

对于10的保证金 - 这些(标签在两种情况下都有3的余量):

enter image description here

因此,如果您对UI有一些严格的指导原则,那么您只需根据需要设置边距并将控件拖动到捕捉线。