Ich habe einige seltsame Zeichnungsartefakte, von denen ich hoffe, dass mir jemand helfen könnte, sie festzunageln.Manuelle Malerei Ausgabe
Grundsätzlich habe ich ein linkes angedocktes Panel, das einen Gradientenhintergrund haben soll, der nicht richtig funktioniert hat. Ich habe die Farben geändert für das Debuggen von
screenshot http://img509.imageshack.us/img509/5650/18740614.png
Das Panel links dockt ist, und hat eine transparente Kontrolle über sie (daher können Sie kleine Stummel von roten entlang der Kanten sehen, wo die transparente Steuerung richtig gemalt wurde , die Hintergrundfarbe aufnehmend).
Wenn ich die Größe des Panels langsam ändere, bekomme ich rote Linien am unteren Rand, von denen ich erwartet hätte, dass sie von gelben Füllungen bedeckt wären. Der Code, den ich verwende, ist wie folgt:
// Construction
sidePanel.Paint += new PaintEventHandler(OnPaint);
private void OnPaint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Panel pb = sender as Panel;
PaintControl(pb.Width, pb.Height, sender, e, true);
}
private static void PaintControl(int width, int height, object sender, PaintEventArgs e, bool sidebar)
{
Rectangle baseRectangle = new Rectangle(0, 0, width -1, height-1);
using (LinearGradientBrush gradientBrush = new LinearGradientBrush(baseRectangle, WizardBaseForm.StartColour, WizardBaseForm.EndColour, 90))
{
e.Graphics.Clear(Color.Yellow);
e.Graphics.DrawRectangle(Pens.Red, baseRectangle);
e.Graphics.FillRectangle(Brushes.Yellow, baseRectangle);
}
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
this.Invalidate();
}
Der Gesamteffekt dieser ist Ich bin nicht entweder eine schöne feste Farbe oder einen schönen Farbverlauf füllen, wenn ich die Größe zu bekommen.
Fair genug. Klappt wunderbar. Ich verstehe immer noch nicht ganz, warum sich das ursprüngliche Problem manifestiert hat. – Ian
Das liegt daran, dass das Paint-Ereignis nicht ausgelöst wird, wenn Sie die Größe ändern. Also musst du es mit dem ResizeRedraw erzwingen, der Rest ist nicht zwingend, aber helfe mit Verbesserungen auf seinen eigenen kleinen Wegen. Das Flackern Ihres Formulars war zuvor, weil Sie den Stil für das Formular festgelegt haben und nicht das Bedienfeld. Es ist eine lustige Welt, die Welt der manuellen Malerei! – ThePower