If you want a really round corner, not just a transparent trick, you can use this example:
private int radius=20; [DefaultValue(20)] public int Radius { get { return radius; } set { radius = value; this.RecreateRegion(); } } private GraphicsPath GetRoundRectagle(Rectangle bounds, int radius) { GraphicsPath path = new GraphicsPath(); path.AddArc(bounds.X, bounds.Y, radius, radius, 180, 90); path.AddArc(bounds.X + bounds.Width - radius, bounds.Y, radius, radius, 270, 90); path.AddArc(bounds.X + bounds.Width - radius, bounds.Y + bounds.Height - radius, radius, radius, 0, 90); path.AddArc(bounds.X, bounds.Y + bounds.Height - radius, radius, radius, 90, 90); path.CloseAllFigures(); return path; } private void RecreateRegion() { var bounds = ClientRectangle; bounds.Width--; bounds.Height--; using (var path = GetRoundRectagle(bounds, this.Radius)) this.Region = new Region(path); this.Invalidate(); } protected override void OnSizeChanged(EventArgs e) { base.OnSizeChanged(e); this.RecreateRegion(); }
And the screenshot will be:

The difference between this approach and transparency:
- By setting a circular area, the control has really round corners, and you can see what is behind the circular part, despite the fact that when it is transparent, you will see the background of the form.
- When setting up a rounded area, when you click on the removed rounded part, click the area pass and drag to the back, but if you use the transparency trick, clicking on the transparent area will be processed by the control.
You can use any of these 2 options. Create a transparent or customize region based on your requirements.
Download
You can download the code or clone the repository here:
source share