.NET Control.Margin属性有什么用?

时间:2020-03-05 18:56:52  来源:igfitidea点击:

我假设Cmargin属性的含义类似于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属性会给我带来什么?

解决方案

回答

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

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

回答

就像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内置控件是FlowLayoutPanel和TableLayoutPanel。希望第三方组件也尊重它。在其他情况下,它基本上没有作用。