2009-06-12 3 views

risposta

30

Se non si desidera creare un controllo personalizzato si può provare questo:

Hook fino a evento vernice della Label.

void label1_Paint(object sender, PaintEventArgs e) 
{ 
    ControlPaint.DrawBorder(e.Graphics, label1.DisplayRectangle, Color.Blue, ButtonBorderStyle.Solid); 
} 

Tratto da here da Andrej Tozon

8

Mi sono imbattuto in questo problema e ho finito per usare una soluzione alternativa.

Creare un controllo personalizzato che consiste in un'etichetta avvolta in un pannello.

È quindi possibile utilizzare il pannello per creare il bordo e cambiarne il colore in base a ciò che si desidera.

Ho trovato che è una buona idea (anche se richiede un po 'di tempo) per avvolgere tutti i controlli nell'applicazione in ogni caso, perché quando si tratta di scoprire è necessaria una proprietà personalizzata, o passare a tutti i controlli di quel tipo, puoi semplicemente cambiare il controllo di base e le modifiche dell'intera app.

12

ho unito le soluzioni da robin.ellis e orandov per ottenere un risultato che ha funzionato il meglio per me. Ho creato un controllo personalizzato che ha ereditato l'oggetto Label e quindi ha annullato l'evento OnPaint.

Public Class nomLabel 
    Inherits Label 

    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) 
     MyBase.OnPaint(e) 

     ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, myColor, ButtonBorderStyle.Solid) 
    End Sub 

End Class 

Grazie per l'aiuto!

+0

come usare questo? 'myLabel.BorderStyle = nomLabel'? – AdorableVB

+0

@AdorableVB, nomLabel è un controllo personalizzato, non uno stile di bordo. Si userebbe nomLabel invece del controllo Label standard. – Stewbob

+0

sì, capito. ho creato il mio ieri, ma il confine è stato risolto. Voglio che 'ButtonBorderStyle.Solid' quando il mouse si libra e' .None' quando mouse Leave. il codice non funziona, e se uso il controllo personalizzato, non applica neanche il codice. – AdorableVB