什么是.NET Control.Margin属性?

Ian*_*oyd 11 c# controls margin

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

然后我读了SDK:

在停靠控件上设置Margin属性不会影响控件与其容器边缘的距离.

鉴于我正在对表格进行控制,并且可能对接它们,Margin属性对我有什么影响?

Owe*_*enP 9

就像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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Phi*_*eck 5

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

例如,使用FlowLayoutPanel或TableLayoutPanel时,它可以非常方便 - 减少默认填充或稍微分隔一些东西.显然,如果您编写自定义布局提供程序,则可以使用Margin但是您认为合适.