11

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

然后我在 SDK 上阅读:

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

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

4

3 回答 3

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);
        }
    }
}

我相信唯一尊重此属性的 .NET 2.0 内置控件是FlowLayoutPaneland TableLayoutPanel; 希望第三方组件也能尊重它。其他场景基本没有影响。

于 2008-09-16T19:17:45.307 回答
5

无论您的控制主机(例如,面板)正在使用什么布局引擎,无论布局引擎认为合适的方式,都可以使用边距属性。但是,正如您所假设的那样,它最适合用于间距。只需阅读该特定布局引擎的文档即可。

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

于 2008-09-16T19:10:11.783 回答
0

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

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

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

在此处输入图像描述

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

在此处输入图像描述

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

于 2017-11-30T08:42:24.547 回答