我认为C#margin属性具有CSS中的含义 - 控件外部的间距。但是,对于我输入的值,似乎忽略了保证金价值。
然后我读了SDK:
在a上设置Margin属性 停靠控制对此没有影响 控制距离 它的容器边缘。
鉴于我正在对表单进行控制,并且可能将它们对接,Margin属性会给我带来什么?
答案 0 :(得分:8)
就像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
;希望第三方组件也尊重它。它在其他情况下基本没有效果。
答案 1 :(得分:5)
您的控件主机(例如,Panel)正在使用的任何布局引擎都会使用margin属性,无论布局引擎认为合适。但是,它最好用于间距,就像你假设的那样。只需阅读该特定布局引擎的文档。
例如,使用FlowLayoutPanel或TableLayoutPanel时,它可以非常方便地减少默认填充或空格。显然,如果您编写自定义布局提供程序,则可以使用Margin,但您认为合适。
答案 2 :(得分:0)
如果您不使用布局容器,Control.Margin属性在设计时也可能有用,而是手动放置控件。
它影响snaplines appear的手动拖动控件之间的距离。
E.g。对于文本框的默认边距值为3,您将拥有此对齐线:
对于10的保证金 - 这些(标签在两种情况下都有3的余量):
因此,如果您对UI有一些严格的指导原则,那么您只需根据需要设置边距并将控件拖动到捕捉线。