2010-06-21 19 views
10

Quiero crear una línea 3D simple en una aplicación WinForms para mejorar la disposición visual de mi diseño de formulario. Esta línea es exactamente como la línea en el cuadro de diálogo Acerca de Windows (se puede abrir en el Explorador de Windows -> Ayuda -> Acerca de Windows).¿Cómo puedo crear una línea en una aplicación WinForms?

Verifique un ejemplo here. La última línea (3D) es la que quiero, no la primera.

¿Cómo se puede hacer esto en C# o Visual Basic (.NET)?

Gracias

Respuesta

7

Si utiliza la utilidad ZoomIt de SysInternals, puede ver que esto es simplemente dos líneas. Una gris oscura sobre una blanca. Dibujar líneas es lo suficientemente simple con Graphics.DrawLine(), solo necesita asegurarse de elegir un color oscuro que funcione bien con el BackColor del formulario. Eso no siempre es color gris oscuro si el usuario selecciona otro tema. Lo que hace que el truco de GroupBox caiga.

Este código de ejemplo es que funciona:

protected override void OnPaint(PaintEventArgs e) { 
     Color back = this.BackColor; 
     Color dark = Color.FromArgb(back.R >> 1, back.G >> 1, back.B >> 1); 
     int y = button1.Bottom + 20; 
     using (var pen = new Pen(dark)) { 
      e.Graphics.DrawLine(pen, 30, y, this.ClientSize.Width - 30, y); 
     } 
     e.Graphics.DrawLine(Pens.White, 30, y+1, this.ClientSize.Width - 30, y+1); 
    } 

Nota el uso de un botón 1 en este código, hay que asegurarse de que la línea se dibuja a la altura correcta, incluso cuando se reajustarán el formulario. Elija su propio control como referencia para la línea.

2

Una forma es crear un cuadro de grupo sin etiqueta y talla 0 (o es 1, no me acuerdo bien) - Sé que he usado ese truco antes, incluso si se siente un poco hacky :-)

+0

Hola @Tor, lo intenté una vez, pero si el usuario usa máscaras en Windows, ¡esto puede hacer que la línea se vea muy extraña! Estoy buscando y una alternativa a esta técnica. – RHaguiuda

3

Yo también he usado el GroupBox hack y tiene la ventaja de estilizarse en función del tema del borde del sistema operativo.

También hay una clase de línea en la colección de control VB Power Packs. Hay algunos otros extras que también hemos usado.

Edit: Aquí está mi clase de separador para dibujar una línea horizontal usando el método mencionado anteriormente.

public class Separator : GroupBox 
{ 
    // Methods 
    protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified) 
    { 
     base.SetBoundsCore(x, y, width, 3, specified); 
    } 

    // Properties 
    [DefaultValue("")] 
    public override string Text 
    { 
     get 
     { 
      return string.Empty; 
     } 
     set 
     { 
     } 
    } 
} 
44

Añadir un control Label con un borde 3D y sin texto a continuación, establezca la altura a 2.

+0

Gracias. Esto funcionó perfectamente. – RHaguiuda

1

Usted puede obtener un efecto separador de línea mediante la adición de una Etiqueta y el establecimiento de su texto subrayado "_"

Cuestiones relacionadas