.NET Control.Margin 属性有啥用?

Posted

技术标签:

【中文标题】.NET Control.Margin 属性有啥用?【英文标题】:What is the .NET Control.Margin property for?.NET Control.Margin 属性有什么用? 【发布时间】:2010-09-09 16:47:51 【问题描述】:

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

然后我在 SDK 上阅读:

设置 Margin 属性 停靠控件对 控制距离 其容器的边缘。

鉴于我在窗体上放置控件,并且可能将它们停靠,Margin 属性对我有什么好处?

【问题讨论】:

【参考方案1】:

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

在使用 FlowLayoutPanel 或 TableLayoutPanel 时非常方便,例如 - 减少默认填充或稍微留出一点空间。显然,如果您编写自定义布局提供程序,您可以使用任何您认为合适的 Margin。

【讨论】:

【参考方案2】:

就像 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;希望第三方组件也能尊重它。其他场景基本没有效果。

【讨论】:

【参考方案3】:

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

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

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

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

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

【讨论】:

以上是关于.NET Control.Margin 属性有啥用?的主要内容,如果未能解决你的问题,请参考以下文章

SupressMessage 属性有啥用?

UIWindow 中的 UIScreen 属性有啥用?

UIImageView 的拉伸属性有啥用。我怎样才能使用这个属性。?

Json.NET 序列化回调中的 StreamingContext 参数有啥用?

TForm 上的 Align 和 Anchor 属性有啥用?

Visual Studio 8 中程序集引用的 Aliases 属性有啥用