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

StackOverflow https://stackoverflow.com/questions/75777

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Установка свойства Margin для закрепленного элемента управления не влияет на расстояние элемента управления от краев его контейнера.

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

enter image description here

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

enter image description here

Поэтому, если у вас есть какие-то строгие рекомендации для вашего пользовательского интерфейса, то вы просто устанавливаете поля так, как вам нужно, и перетаскиваете элементы управления к линиям привязки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top