Erstellen Sie glatte abgerundete Ecken in Panels, wenn Sie versuchen, die Ecken einer Form in Winforms-Anwendungen zu krC#

Ein Treffpunkt für C#-Programmierer
Guest
 Erstellen Sie glatte abgerundete Ecken in Panels, wenn Sie versuchen, die Ecken einer Form in Winforms-Anwendungen zu kr

Post by Guest »

Ich arbeite an einer Windows Forms-Anwendung, in der ich Code implementiert habe, um die Ecken des Formulars zu krümmen. Während der Code das Formular selbst erfolgreich krümmt, funktioniert er nicht für Steuerelemente wie Panels innerhalb des Formulars. Wenn dem Formular ein Panel hinzugefügt wird, funktioniert außerdem auch der Eckenkrümmungseffekt des Formulars nicht mehr wie erwartet.
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.
Code:
#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;
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post