Moin Leute.
Ist es denkbar, dass die Property
Folgende Testsituation:
Ich stelle zwei sich überlappende Quadrate dar und variiere den FillMode: { FillMode.Winding, FillMode.Alternate }.
Werden die Quadrate dem GraphicsPath mit
Wird eines mit
CheckBox1 wechselt die Befüllung des
CheckBox2 wechselt die Darstellung zwischen
Form mit 2 CheckBoxen und einer PictureBox:
Spoiler anzeigen
Laut Beschreibung müsste bei aktiver CheckBox2 unabhängig von CheckBox1 alles gefüllt sein, dem ist aber nicht so.
Lässt sich das iwie lösen?
Ist es denkbar, dass die Property
GraphicsPath.FillMode
nur bei in sich geschlosenen Kurven funktioniert?Folgende Testsituation:
Ich stelle zwei sich überlappende Quadrate dar und variiere den FillMode: { FillMode.Winding, FillMode.Alternate }.
Werden die Quadrate dem GraphicsPath mit
AddRectangle()
hinzugefügt, ist alles in Ordnung.Wird eines mit
AddRectangle()
und das andere mit AddPolygon()
hinzugefügt, erfolgt die Darstellung ausschließlich mit FillMode.Alternate
.CheckBox1 wechselt die Befüllung des
GraphicsPath
s zwischen AddRectangle()
und AddPolygon()
.CheckBox2 wechselt die Darstellung zwischen
FillMode.Winding
und FillMode.Alternate
.Form mit 2 CheckBoxen und einer PictureBox:
C#-Quellcode
- using System;
- using System.Drawing;
- using System.Drawing.Drawing2D;
- using System.Windows.Forms;
- namespace Zeigerinstrument
- {
- public partial class Form1 : Form
- {
- private GraphicsPath Path1;
- private GraphicsPath Path2;
- public Form1()
- {
- this.InitializeComponent();
- this.Path1 = new GraphicsPath();
- this.Path2 = new GraphicsPath();
- this.checkBox1_CheckedChanged(this.checkBox1, EventArgs.Empty);
- }
- private void checkBox1_CheckedChanged(object sender, EventArgs e)
- {
- this.Path1.Reset();
- if (this.checkBox1.Checked)
- {
- this.Path1.AddRectangle(new Rectangle(new Point(0, 0), new Size(150, 150)));
- }
- else
- {
- PointF[] array = new PointF[5];
- array[0] = new PointF(0f, 0f);
- array[1] = new PointF(0f, 150f);
- array[2] = new PointF(150f, 150f);
- array[3] = new PointF(150f, 0f);
- array[4] = new PointF(0f, 0f);
- this.Path1.AddPolygon(array);
- }
- this.Path1.AddRectangle(new Rectangle(new Point(100, 100), new Size(150, 150)));
- this.pictureBox1.Invalidate();
- }
- private void pictureBox1_Paint(object sender, PaintEventArgs e)
- {
- this.Path2.Reset();
- this.Path2.AddPath(this.Path1, false);
- this.Path2.FillMode = this.checkBox2.Checked ? FillMode.Winding : FillMode.Alternate;
- e.Graphics.FillPath(Brushes.Black, this.Path2);
- }
- private void checkBox2_CheckedChanged(object sender, EventArgs e)
- {
- this.pictureBox1.Invalidate();
- }
- }
- }
Laut Beschreibung müsste bei aktiver CheckBox2 unabhängig von CheckBox1 alles gefüllt sein, dem ist aber nicht so.
Lässt sich das iwie lösen?
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!