C# の margin プロパティには、CSS のように、コントロールの外側の間隔という意味があると思いました。しかし、入力した値に関係なく、マージン値は無視されているようです。
次に、SDK を読みました。
ドッキングされたコントロールに Margin プロパティを設定しても、コンテナの端からコントロールまでの距離には影響しません。
フォームにコントロールを配置し、おそらくそれらをドッキングしている場合、Margin プロパティによって何が得られるでしょうか?
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
andだけだと思いますTableLayoutPanel
。うまくいけば、サードパーティのコンポーネントもそれを尊重します。それ以外のシナリオでは、基本的に影響はありません。
margin プロパティは、コントロール ホスト (たとえば、Panel) が使用しているレイアウト エンジンによって、そのレイアウト エンジンが適切と考える方法で使用されます。ただし、想定どおりにスペーシングに使用するのが最適です。その特定のレイアウト エンジンのドキュメントを読んでください。
たとえば、FlowLayoutPanel または TableLayoutPanel を使用する場合、デフォルトのパディングを減らしたり、スペースを少し広げたりする場合に非常に便利です。明らかに、カスタム レイアウト プロバイダーを作成する場合は、適切と思われる方法で Margin を使用できます。