Domanda

Sto aggiungendo dinamicamente etichette ai pannelli nel mio codice.

Qualcosa che voglio fare è essere in grado di delineare il carattere in modo che possa distinguersi dal colore di sfondo del pannello.

Il problema è che non so come creare uno schema per il mio carattere o anche un effetto ombra in C# usando Winforms.

Qualcuno sa cosa dovrei guardare o può indicarmi nella giusta direzione? Se non capisci cosa intendo, la seguente immagine è cosa vorrei: (la fodera esterna)

enter image description here

È stato utile?

Soluzione

Penso che devi dipingere personalizzato il tuo controllo. Ecco un esempio per un Label. Nota che è solo una demo, dovresti provare a saperne di più sulla pittura personalizzata in Winforms:

public class CustomLabel : Label
{
    public CustomLabel()
    {
        OutlineForeColor = Color.Green;
        OutlineWidth = 2;
    }
    public Color OutlineForeColor { get; set; }
    public float OutlineWidth { get; set; }
    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.FillRectangle(new SolidBrush(BackColor), ClientRectangle);
        using (GraphicsPath gp = new GraphicsPath())
        using (Pen outline = new Pen(OutlineForeColor, OutlineWidth)
            { LineJoin = LineJoin.Round})
        using(StringFormat sf = new StringFormat())
        using(Brush foreBrush = new SolidBrush(ForeColor))
        {
            gp.AddString(Text, Font.FontFamily, (int)Font.Style,
                Font.Size, ClientRectangle, sf);                                
            e.Graphics.ScaleTransform(1.3f, 1.35f);
            e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
            e.Graphics.DrawPath(outline, gp);                
            e.Graphics.FillPath(foreBrush, gp);                            
        }
    }
}

Puoi cambiare il colore del contorno tramite OutlineForeColor proprietà, puoi modificare la larghezza del profilo tramite il OutlineWidth proprietà. Quando si modificano queste proprietà nel progettista, l'effetto non viene applicato immediatamente (poiché non esiste alcun codice per farlo, voglio mantenerlo breve e semplice), l'effetto viene applicato solo quando il modulo è focalizzato.

Quello che puoi aggiungere di più è mappare il TextAlign al Alignment del StringFormat (di nome sf Nel codice), puoi anche sovrascrivere alcuni metodi di raccolta di eventi per aggiungere più controllo sull'aspetto (come per cambiare il ForeColor Quando il mouse è sopra l'etichetta ...). Puoi anche creare un po 'di effetto ombra ed effetto luminoso (richiede un po' più di codice).

enter image description here

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top