Для чего используется свойство .NET Control.Margin?

Я предположил, что свойство поля С# имеет такое же значение, как и в CSS, - расстояние между элементами управления. Но значения маржи, кажется, игнорируются, чтобы понять, какие значения я вводил.

Затем я прочитал на SDK:

Настройка свойства Margin на пристыкованный контроль не влияет на расстояние управления от края его контейнера.

Учитывая, что я устанавливаю элементы управления в формах и, возможно, стыкую их, что мне дает свойство Margin?

Ответ 1

Свойство margin используется каким-либо механизмом компоновки, которым управляет хост (например, Panel), каким бы способом он ни считался подходящим. Однако он лучше всего подходит для интервалов так же, как вы предполагаете. Просто прочитайте документацию для этого конкретного механизма компоновки.

Это может быть очень удобно при использовании FlowLayoutPanel или TableLayoutPanel, например, - либо немного уменьшить размер прошивки или пробела по умолчанию. Очевидно, что если вы пишете собственный поставщик компоновки, вы можете использовать Margin, как вы считаете нужным.

Ответ 2

Как и Филипп Рик, свойство 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; надеюсь, сторонние компоненты также уважают его. Это не имеет никакого эффекта в других сценариях.

Ответ 3

Свойство Control.Margin также может быть полезно во время разработки, если вы не используете макет компоновки, а скорее размещаете элементы управления вручную.

Он влияет на расстояние между ручными элементами управления, на которых отображаются .

например. для значения по умолчанию по умолчанию 3 для текстового поля у вас будут такие привязки:

введите описание изображения здесь

И для поля 10 - эти (в обоих случаях метка имеет запас 3):

введите описание изображения здесь

Итак, если у вас есть какие-то строгие правила для вас, вы просто устанавливаете поля по мере необходимости и перетаскиваете элементы управления в привязки.