Pregunta

Supuse que la propiedad de margen de C# tenía un significado como en CSS: el espacio alrededor del exterior del control.Pero los valores de margen parecen ignorarse sin importar qué valores ingrese.

Luego leí en el SDK:

Establecer la propiedad de margen en un control atracado no tiene ningún efecto en la distancia del control desde los bordes de su contenedor.

Dado que estoy colocando controles en los formularios y tal vez anclándolos, ¿qué me aporta la propiedad Margen?

¿Fue útil?

Solución

La propiedad de margen es utilizada por cualquier motor de diseño que esté usando su host de control (Panel, por ejemplo), de la forma que ese motor de diseño considere adecuada.Sin embargo, es mejor utilizarlo para espaciar tal como supone.Simplemente lea la documentación de ese motor de diseño específico.

Puede ser muy útil cuando se utiliza FlowLayoutPanel o TableLayoutPanel, por ejemplo, para reducir el relleno predeterminado o espaciar un poco las cosas.Obviamente, si escribe un proveedor de diseño personalizado, puede usar Margen como mejor le parezca.

Otros consejos

Como dijo Philip Rieck, la propiedad de margen solo la respetan los controles de contenedor que realizan el diseño.He aquí un ejemplo que deja bastante claro cómo TableLayoutPanel respeta la propiedad Margen:

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);
        }
    }
}

Creo que los únicos controles integrados de .NET 2.0 que respetan esta propiedad son FlowLayoutPanel y TableLayoutPanel;Es de esperar que los componentes de terceros también lo respeten.Básicamente no tiene ningún efecto en otros escenarios.

La propiedad Control.Margin también podría ser útil en tiempo de diseño si no utiliza el contenedor de diseño, sino que coloca los controles manualmente.

Afecta la distancia entre los controles arrastrados manualmente en los que aparecen líneas instantáneas.

P.ej.para un valor de margen predeterminado de 3 para el cuadro de texto, tendría estas líneas instantáneas:

enter image description here

Y para un margen de 10, estos (la etiqueta tiene un margen de 3 en ambos casos):

enter image description here

Entonces, si tiene algunas pautas estrictas para su interfaz de usuario, simplemente establezca los márgenes que necesite y arrastre los controles a las líneas de ajuste.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top