.NET Control.Margin 属性有什么用?
题
我假设 C# 的 margin 属性具有与 CSS 类似的含义 - 控件外部的间距。但无论我输入什么值,边距值似乎都会被忽略。
然后我读到了SDK:
设置对接控件上的保证金属性对控制距离容器边缘的距离没有影响。
鉴于我将控件放置在表单上,并且可能对接它们,Margin 属性会给我带来什么?
解决方案
margin 属性由您的控制主机(例如,Panel)使用的任何布局引擎使用,以布局引擎认为合适的方式使用。然而,正如您所假设的那样,它最好用于间距。只需阅读该特定布局引擎的文档即可。
例如,当使用 FlowLayoutPanel 或 TableLayoutPanel 时,它可以非常方便 - 减少默认填充或稍微间隔一些。显然,如果您编写自定义布局提供程序,则可以使用您认为合适的 Margin。
其他提示
正如 Philip Rieck 所说,边距属性仅受执行布局的容器控件的尊重。这是一个例子,可以很清楚地说明如何 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
;希望第三方组件也尊重它。其他场景基本没有影响。
如果您不使用布局容器,而是手动放置控件,Control.Margin 属性在设计时也很有用。
它影响手动拖动控件之间的距离 出现对齐线.
例如。对于文本框的默认边距值为 3,您将拥有以下对齐线:
对于 10 的边距 - 这些(两种情况下标签的边距均为 3):
因此,如果您对 UI 有一些严格的指导原则,那么您只需根据需要设置边距并将控件拖动到对齐线即可。
不隶属于 StackOverflow