2008-09-16 248 views
10

我認爲C#頁邊距屬性的含義與CSS類似 - 控件外部的間距。但是,保證金價值似乎被忽略,無論我輸入什麼值。什麼是.NET Control.Margin屬性?

然後我讀了SDK上:

在 停靠控制設置Margin屬性對 距離其容器的邊緣 控制無效。

鑑於我將控件放在窗體上,並且可能與它們對接,Margin屬性給我帶來了什麼?

回答

5

您的控制主機(例如面板)使用的任何佈局引擎都會使用該邊距屬性,無論該佈局引擎認爲合適。但是,它最好用於間隔,就像您所假設的那樣。請閱讀該特定佈局引擎的文檔。

例如,當使用FlowLayoutPanel或TableLayoutPanel時,它可以非常方便 - 或者減少默認填充或空間。顯然,如果你寫一個自定義佈局提供者,你可以使用Margin,但是你認爲合適。

8

就像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內置控件是FlowLayoutPanelTableLayoutPanel;希望第三方組件也會尊重它。在其他情況下基本沒有影響。

0

如果您不使用佈局容器,而是手動放置控件,則Control.Margin屬性在設計時也可能非常有用。

它影響手動拖動控件之間的距離,其中snaplines appear

E.g.爲文本框的3預設保證金價值,你會有這樣對齊線:

enter image description here

併爲10餘量 - 這些(標有三緣在這兩種情況下):

enter image description here

因此,如果您對UI有一些嚴格的指導方針,那麼您只需根據需要設置邊距,然後將控件拖至抓線。