我認爲C#頁邊距屬性的含義與CSS類似 - 控件外部的間距。但是,保證金價值似乎被忽略,無論我輸入什麼值。什麼是.NET Control.Margin屬性?
然後我讀了SDK上:
在 停靠控制設置Margin屬性對 距離其容器的邊緣 控制無效。
鑑於我將控件放在窗體上,並且可能與它們對接,Margin屬性給我帶來了什麼?
我認爲C#頁邊距屬性的含義與CSS類似 - 控件外部的間距。但是,保證金價值似乎被忽略,無論我輸入什麼值。什麼是.NET Control.Margin屬性?
然後我讀了SDK上:
在 停靠控制設置Margin屬性對 距離其容器的邊緣 控制無效。
鑑於我將控件放在窗體上,並且可能與它們對接,Margin屬性給我帶來了什麼?
您的控制主機(例如面板)使用的任何佈局引擎都會使用該邊距屬性,無論該佈局引擎認爲合適。但是,它最好用於間隔,就像您所假設的那樣。請閱讀該特定佈局引擎的文檔。
例如,當使用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屬性在設計時也可能非常有用。
它影響手動拖動控件之間的距離,其中snaplines appear。
E.g.爲文本框的3預設保證金價值,你會有這樣對齊線:
併爲10餘量 - 這些(標有三緣在這兩種情況下):
因此,如果您對UI有一些嚴格的指導方針,那麼您只需根據需要設置邊距,然後將控件拖至抓線。