关于c#:. NET Control.Margin属性的作用是什么?

What is the .NET Control.Margin property for?

我假设C#margin属性的含义与CSS中类似-控件外部的间距。 但是,无论我输入什么值,保证金值似乎都被忽略了。

然后,我在SDK上阅读:

Setting the Margin property on a
docked control has no effect on the
distance of the control from the the
edges of its container.

考虑到我要在窗体上放置控件,或者可能将它们停靠在窗体上,Margin属性会给我带来什么?


就像Philip Rieck所说的那样,margin属性仅受执行布局的容器控件的尊重。下面的示例可以非常清楚地说明TableLayoutPanel如何尊重Margin属性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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;希望第三方组件也尊重它。在其他情况下,它基本上没有作用。


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

例如,在使用FlowLayoutPanel或TableLayoutPanel时,可以非常方便-减少默认的填充或将内容空间缩小。显然,如果编写自定义布局提供程序,则可以使用边距,但您认为合适。


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

它会影响出现对齐线的手动拖动控件之间的距离。

例如。对于文本框的默认边距值为3,您将具有以下对齐线:

enter image description here

对于10的边距-这些(两种情况下标签的边距均为3):

enter image description here

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


推荐阅读