[VB.net/C#] In Picturebox malen ähnlich wie bei Paint

Danke!!

Jetzt noch eine Frage:

Ich hab es schon versucht aber nicht geschafft :-( . Wie kann ich einen Kreis Zeichnen :confused::confused: also ich hab den Source von Spyke womit ich Linien male und dann möchte ich wenn man button1 drückt das er stat einer Linie einen Kreis malt. Sry wenn die frage doof Klinkt aber ich bin totaler anfänger.

hoffe ihr könnt mir Helfen
lg beyoNd
 
Hi.

Als erstes würde ich dich gerne bitten, etwas mehr Zeit in das Verfassen deiner Beiträge zu investieren. ;)

Zu deinem Problem:

Mag ja sein, dass du Anfänger bist, aber überleg doch selber mal, wie du das Problem lösen kannst. Diese Tätigkeit gehört zum Lernprozess dazu.
Kommst du kein bisschen weiter, hast dir dein Ziel vielleicht zu hoch gesteckt.

Wenn dir hier jemand alles klitzeklein vorbetet, lernst ja auch nichts daraus.

Hier mal ein paar Fragen die du dir selbst stellen kannst, um vielleicht zu einer Lösung zu gelangen.

  • Wie zeichne ich einen Kreis?
  • Welche Methoden gibts bei der entsprechenden Klasse dafür, und wie unterscheidet es sich vom Zeichnen einer Linie?
  • Welche Daten brauche ich für die entsprechenden Methoden?
  • Start- und Endpunkt? Breite, Höhe? (Kreis oder auch Ellipse?!)
  • Wie könnte ich an diese Daten gelangen?


lg,.. Alex
 
Ich habe mir schon meine gedanken und mehr als 3 Stundeb probiert wie ich es machen koennte und bin zu keinem Ergebnis gekommen. Wenn mir z.B. einer das In den Source reinschreiben kann wie ich malen und Kreise machen kann dann koennte ich mir den alten Source nehmen wo man nur malen kann und kucken was sich veraendert hat etc.. Zudem habe ich dann versucht nur einen Kreis zu malen (mit Hilfe eines Buches) aber mein Problem ist ich bekommen die beiden Programme nicht zu einem. Kann mir dann keiner zeigen wie das geht

lg beyoNd
 
ok du willst jetzt also 2 Unterschiedliche Zeichenzustände abhandeln.
Da stellt sich natrülich die Frage wie kann man am besten utnerscheiden ob frei Hand oder ein Kreis gezeichnet werden soll.

Ich hab mich hier für ein Enum entschieden da man dies leicht mit weiteren Zeichenelemente erweitern könnte.
C#:
/// <summary>
/// beschreibung unserer verfügbaren Zeichenobjekte
/// </summary>
enum ZeichenObjekte
{
        Frei = 0,
        Kreis = 1
}

Dann noch eine private globale Variable welche uns sagt welches Objekt wir gerade Zeichnen wollen
C#:
private ZeichenObjekte currentZeichenObjekt = ZeichenObjekte.Frei; //akt. zu zeichnende Objekt

Als nächstes habe ich nur die Draw Methode um das Kreis Objekt erweitert
C#:
/// <summary>
/// zeichnen
/// </summary>
private void Draw(Graphics g)
{
        if (list.Count > 0)
        {
                if (currentZeichenObjekt == ZeichenObjekte.Frei)
                {
                        byte[] bs = new byte[list.Count];
                        bs[0] = (byte)PathPointType.Start;
                        for (int i = 1; i < list.Count; i++)
                                bs[i] = (byte)PathPointType.Line;

                        using (Pen p = new Pen(Color.Black, 5))
                                g.DrawPath(p, new System.Drawing.Drawing2D.GraphicsPath(list.ToArray(), bs));
                }
                else if (currentZeichenObjekt == ZeichenObjekte.Kreis)
                {
                        //ermittelt der Startpunkte und Endpunkte (list[0] (Maustaste gedrückt) und list[list.Count - 1] (Maustaste losgelassen) da uns in diesem Fall die anderen Punkte nicht interessieren
                        int minX = Math.Min(list[0].X, list[list.Count - 1].X);
                        int maxX = Math.Max(list[0].X, list[list.Count - 1].X);
                        int minY = Math.Min(list[0].Y, list[list.Count - 1].Y);
                        int maxY = Math.Max(list[0].Y, list[list.Count - 1].Y);

                        Rectangle rec = new Rectangle(minX, minY, maxX - minX, maxY - minY);

                        using (Pen p = new Pen(Color.Black, 5))
                                g.DrawEllipse(p, rec);
                }
        }
}

Über Buttons kannst du nun einfach die Objekte wechseln
C#:
private void freiBn_Click(object sender, EventArgs e)
{
        currentZeichenObjekt = ZeichenObjekte.Frei;
}

private void kreisBn_Click(object sender, EventArgs e)
{
        currentZeichenObjekt = ZeichenObjekte.Kreis;
}
 
Zuletzt bearbeitet von einem Moderator:
Zurück