Pregunta

Solo tengo curiosidad por el control que se muestra a continuación, la línea recta con una etiqueta al lado.Intenté encontrar un control similar, pero no había ninguno ni ninguna configuración de cuadro de grupo, por lo que simplemente creé un GroupBox con una altura de 2 que lo replica.

¿Pero existe un control o configuración real para hacer esto?¿Y cómo se llama el control real?

Internet Options property dialog

¿Fue útil?

Solución

Espía++ nos dice que en realidad son dos separados STATIC control S (similar a un Label en WinForms).

  • El primero es simplemente un control de texto estático normal que dice "Página de inicio".

  • El segundo tiene el SS_ETCHEDHORZ estilo set, lo que hace que se dibuje como una línea 3D.Desafortunadamente, la capacidad de configurar este estilo no está disponible desde WinForms.

Como señaló en la pregunta, existen algunos trucos/soluciones que nos permiten lograr una apariencia similar, como comprimir verticalmente un GroupBox controlar o anular la OnPaint método de un Label controlar y utilizar el ControlPaint clase para dibujar un borde 3D.Funcionan, pero nunca me han gustado.

Pero tu poder en realidad establecer el SS_ETCHEDHORZ Diseñe usted mismo para que pueda replicar exactamente la interfaz de usuario nativa.Aquí hay una pequeña clase que hace exactamente eso.Agréguelo a su proyecto, compílelo y debería ver aparecer un nuevo control en su caja de herramientas llamado "HorizontalRule".¡Úselo como lo haría con cualquier otro control!

public class HorizontalRule : Control
{
    private const int FixedHeight   = 2;

    private const int WS_CHILD      = 0x40000000;
    private const int WS_VISIBLE    = 0x10000000;
    private const int SS_ETCHEDHORZ = 0x00000010;
    private const int SS_ETCHEDVERT = 0x00000011;

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ClassName = "STATIC";
            cp.Style = WS_CHILD | SS_ETCHEDHORZ;
            if (this.Visible)
            {
                cp.Style |= WS_VISIBLE;
            }
            return cp;
        }
    }

    protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
    {
        height = FixedHeight;
        base.SetBoundsCore(x, y, width, height, specified);
    }
}

También puede encontrar información más detallada y código de muestra adicional. aquí en CodeProject.

Otros consejos

Tuve el mismo problema hace un par de años y terminé simplemente trazando una línea para el propósito.

De hecho, incluso utilicé una imagen de línea fija de un ancho lo suficientemente largo como para que pudiera usarse en todos los casos mostrando la parte requerida (ancho) de la imagen.

Esta solución me ha funcionado bien desde entonces.

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