Sto provando ad avere un controllo utente con gli angoli arrotondati. Non ha una dimensione fissa ma di solito non ha una larghezza molto superiore a 120 pixel.Come creare un controllo utente con angoli arrotondati?
Ho bisogno che l'User Control e il suo contenuto (un'etichetta e un tavolo) abbiano bordi arrotondati e assomiglino a una scatola rotonda.
Ho usato questo codice.
[DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")]
private static extern IntPtr CreateRoundRectRgn
(
int nLeftRect, // x-coordinate of upper-left corner
int nTopRect, // y-coordinate of upper-left corner
int nRightRect, // x-coordinate of lower-right corner
int nBottomRect, // y-coordinate of lower-right corner
int nWidthEllipse, // height of ellipse
int nHeightEllipse // width of ellipse
);
public static System.Drawing.Region GetRoundedRegion(int controlWidth, int controlHeight)
{
return System.Drawing.Region.FromHrgn(CreateRoundRectRgn(0, 0, controlWidth - 5, controlHeight - 5, 20, 20));
}
Questo dà il controllo gli angoli arrotondati, ma dopo che è stato in esecuzione volte, attendere alcuni secondi e ho aggiunto multipli di mio controllo utente per la forma che causerà una perdita e che otterrà il Whitebox con una croce rossa sul mio controlli utente.
C'è un modo migliore per farlo?
Ho avuto anche questo problema. E credimi, lascia andare WinForms e inizia con 'WPF'. Molto meglio per la personalizzazione !! – kevintjuh93
Come si usa 'CreateRoundRectRgn'? Simile a [questo] (http://stackoverflow.com/q/17787573/1997232)? Quindi ovviamente avrai una perdita di maniglia. Vuoi correggere il bug (quindi inserire il codice in cui lo usi) o stai cercando alternative? Un'alternativa potrebbe essere un controllo [trasparente] (http://stackoverflow.com/q/9358500/1997232) con immagini con angoli arrotondati. – Sinatr
Sinatr, sei corretto questo è esattamente come sto facendo questo, GetRoundedRegion viene chiamato quando il modulo viene ridipinto, purtroppo non sono in grado di chiamare questo metodo in OnHandleCreated() come suggerito nel tuo link in quanto la dimensione è altamente variabile e alla creazione dell'impugnatura, la dimensione dei controlli è la dimensione predefinita e diventa casuale. – CJM