2008-09-16 18 views
10

Supuse que la propiedad del margen C# tenía un significado como en CSS: el espacio alrededor del control. Pero los valores de Margin parecen ignorarse para importar qué valores ingrese.¿Para qué sirve la propiedad .NET Control.Margin?

luego leí en el SDK:

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

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

Respuesta

5

La propiedad de margen es utilizada por cualquier motor de diseño que use su host de control (Panel, por ejemplo), de la manera que el motor de diseño considere adecuado. Sin embargo, es mejor usarlo para el espaciamiento tal como lo supone. Simplemente lea la documentación para ese motor de diseño específico.

Puede ser muy útil cuando se utiliza un 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.

8

Como dijo Philip Rieck, la propiedad de margen solo es respetada por los controles de contenedor que realizan el diseño. Aquí hay un ejemplo que hace que sea bastante claro cómo el 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 la única .NET 2.0 controles integrados que respeten esta propiedad son FlowLayoutPanel y TableLayoutPanel; es de esperar que los componentes de terceros lo respeten también. Básicamente no tiene ningún efecto en otros escenarios.

0

La propiedad Control.Margin también podría ser útil en el momento del diseño si no usa el contenedor de disposición, sino que coloca controles manualmente.

Afecta la distancia entre los controles manualmente arrastrados a los que snaplines appear.

E.g. para el valor de margen predeterminado de 3 para la caja de texto que tienen esta snaplines:

enter image description here

Y para el margen de 10 - éstos (etiqueta tiene margen de 3 en ambos casos):

enter image description here

Por lo tanto, si tiene algunas pautas estrictas para la interfaz de usuario, simplemente establezca los márgenes que necesite y arrastre los controles a las referencias.