Ich benötige eine Lösung, die es mir ermöglicht, die Ecken beider Formulare zu krümmen und andere Bedienelemente (z. B. Bedienfeld) konsistent. Die Implementierung sollte Folgendes sicherstellen:
- Die Eckkurven des Formulars bleiben erhalten, auch wenn andere Steuerelemente hinzugefügt werden.
- Steuerelemente wie Panels können auch gebogene Ecken mit sanfter Überblendung haben.
#region Rounded Corner
protected override void OnLoad(EventArgs e)
{
if (!DesignMode)
{
drawTimer.Interval = 1000 / 60;
drawTimer.Tick += DrawForm;
drawTimer.Start();
}
base.OnLoad(e);
}
private void DrawForm(object sender, EventArgs e)
{
using (Bitmap backImage = new Bitmap(this.Width, this.Height))
{
using (Graphics graphics = Graphics.FromImage(backImage))
{
Rectangle gradientRectangle = new Rectangle(0, 0,
this.Width - 1, this.Height - 1);
using (Brush b = new LinearGradientBrush(gradientRectangle,
Color.FromArgb(70, 95, 122), Color.FromArgb(70, 95, 122), 0.0f))
{
graphics.SmoothingMode = SmoothingMode.HighQuality;
RoundedRectangle.FillRoundedRectangle(graphics, b, gradientRectangle, 20);
foreach (Control ctrl in this.Controls)
{
using (Bitmap bmp = new Bitmap(ctrl.Width, ctrl.Height))
{
Rectangle rect = new Rectangle(0, 0, ctrl.Width, ctrl.Height);
ctrl.DrawToBitmap(bmp, rect);
graphics.DrawImage(bmp, ctrl.Location);
}
}
PerPixelAlphaBlend.SetBitmap(backImage, Left, Top, Handle);
}
}
}
protected override void OnPaint(PaintEventArgs e)
{
if (DesignMode)
{
Graphics graphics = e.Graphics;
Rectangle gradientRectangle = new Rectangle(0, 0, this.Width - 1, this.Height - 1);
using (Brush brush = new LinearGradientBrush(gradientRectangle, Color.FromArgb(70, 95, 122), Color.FromArgb(70, 95, 122), 0.0f))
{
graphics.SmoothingMode = SmoothingMode.HighQuality;
RoundedRectangle.FillRoundedRectangle(graphics, brush, gradientRectangle, 40);
}
}
base.OnPaint(e);
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
if (!DesignMode)
{
cp.ExStyle |= 0x00080000;
}
return cp;
}
}