Ich versuche, ein Benutzersteuerelement mit abgerundeten Ecken zu haben. Es hat keine feste Größe, aber es hat normalerweise keine Breite viel mehr als 120 Pixel.So erstellen Sie ein Benutzersteuerelement mit abgerundeten Ecken?
Ich brauche das User Control und seinen Inhalt (ein Label und eine Tabelle), um abgerundete Kanten zu haben und wie eine runde Box aussehen.
Ich habe diesen Code verwendet.
[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));
}
Dies gibt die Steuer abgerundete Ecken, aber nachdem es afew mal ausgeführt worden, und ich habe ein Vielfach von meinen User Control zu dem Formular hinzugefügt wird es ein Leck verursachen, und ich werde die Whitebox mit einem roten Kreuz bekommt auf meinem Benutzersteuerelemente.
Gibt es einen besseren Weg, dies zu tun?
Ich hatte dieses Problem auch. Und glauben Sie mir, lassen Sie WinForms los und beginnen Sie mit 'WPF'. Viel besser für das Customizing! – kevintjuh93
Wie benutzt man 'CreateRoundRectRgn'? Ähnlich wie [das] (http://stackoverflow.com/q/17787573/1997232)? Dann haben Sie natürlich einen Griff Leck. Möchten Sie den Fehler beheben (dann Postleitzahl wo Sie ihn verwenden) oder nach Alternativen suchen? Eine Alternative könnte ein [transparent] (http://stackoverflow.com/q/9358500/1997232) Steuerelement mit Bildern mit abgerundeten Ecken sein. – Sinatr
Sinatr, Sie haben Recht Dies ist genau, wie ich dies tue, GetRoundedRegion wird aufgerufen, wenn das Formular neu gezeichnet wird, leider kann ich diese Methode in der OnHandleCreated() wie in Ihrem Link vorgeschlagen, da die Größe sehr variabel ist Bei der Erstellung von Handle ist die Controls-Größe die Standardgröße und es geht abit random. – CJM