Benutzer mit den meisten Antworten
Frage zu GDI+

Frage
-
Hallo NG,
ich moechte einen flow chart mit GDI+ zeichnen.
Da ich recht unerfahren mit GDI+ bin, stellt sich mir die Frage, worauf zeichnet man
am besten. Ich will nicht direkt auf die Form zeichnen sondern auf ein Panel oder in
eine PictureBox zeichnen.
Was haltet Ihr da fuer geeigneter, Panel oder PictureBox?
Danke schon mal fuer Antworten.
Gruß, myamadeus
Antworten
-
Was besser ist hängt davon ab, was es sonst noch für Randbedingungen vorliegen. Bei großen Datenmengen (Zeichenelementen), die sich nur selten ändern und, wenn ein häufiges Refresh erforderlich ist, ist das Zeichnen in ein Image ggf. günstiger. Unabhängig von der konkret genutzten Oberfläche kannst Du ja die Routine schreiben und dann Dir das Grafics-Objekt für Testzwecke von unterschiedlichen Oberflächen geben lassen und das Verhalten beurteilen.--
Viele Gruesse
Peter- Als Antwort vorgeschlagen Ionut DumaModerator Montag, 19. November 2012 13:14
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 21. November 2012 11:41
-
Hallo, ich halte das Panel für geeigneter, da es als reines ContainerElement fungiert.
Was das Flowchart an geht, hast du bereits viele Formen vorgegeben, die du zeichnen kannst und für alles wo es nichts vorgefertigtes gibt kann man auch noch spezielle Kurven und Polygone zeichnen.
Um etwas zu zeichnen solltest du das Paint-Event abfangen und dort drinn zeichnen. Wenn du etwas aktualisieren musst rufst du Invalidate auf, somit wird Paint erneut ausgelöst.Ein sehr ausführliches Tutorial gibt es hier. Das ist zwar schon etwas älter, abr von der Funktio her ist es bis heute gleich geblieben.
Koopakiller - http://koopakiller.ko.ohost.de/
- Als Antwort vorgeschlagen Ionut DumaModerator Montag, 19. November 2012 13:14
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 21. November 2012 11:41
-
Hallo zusammen,
Wenn man nicht über Control.CreateGraphics in die PictureBox zeichnet, ist es von der technischen Seite fast egal auf welche grafische Oberfläche gezeichnet wird. Eine grafische Oberfläche ist eine grafische Oberfläche. Punkt. Ich weiß, dass man unter VB auf PictureBox-en zeichnete, aber unter .NET kann man auf ein x-beliebiges Control zeichnen. Es gibt allerdings ein paar Dinge zu beachten:
PictureBox ist ein Steuerelement, das primär Bilder *anzeigt*. Es hat ein paar sehr nützliche Features, darunter auch die autom. Doppelpufferung, die bereits im Konstruktor von PictureBox aktiviert wird:
base.SetStyle(ControlStyles.Selectable | ControlStyles.Opaque, false);
base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.SupportsTransparentBackColor, true);Aber PictureBox hat auch viele Features, die sich ungünstig auf das Zeichnen auswirken können.
Panel hingegen ist ein einfacheres, von ScrollableControl abgeleitetes Steuerelement, das andere Stile setzt und nicht "von Haus aus" doppelt puffert, dafür aber sowohl das Zeichnen des Hintergrunds als auch des Vordergrunds im OnPaint-Ereignishandler ausführt:
base.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Selectable, false);
base.SetStyle(ControlStyles.SupportsTransparentBackColor, true);Wenn man die Größe des gezeichneten Bildes nicht verändern muss, kann man das gezeichnete Bild natürlich auch in einer PictureBox anzeigen. Sobald man aber Zooming, Skalierung etc. beim Zeichnen implementieren muss, ist Panel als grafische Oberfläche geeigneter, da einfacher und flexibler.
Control.CreateGraphics() solltest Du lieber mit PictureBox nicht verwenden. Das Zeichnen sollte auch beim Panel ausschließlich im Paint-Ereignis stattfinden.
Bob Powell - CreateGraphics. A boon or a curse?
http://www.bobpowell.net/picturebox.htmHow not to use the PictureBox control.
http://www.bobpowell.net/pictureboxhowto.htm
P.S. Am besten wäre es natürlich weder das eine noch das andere zu nehmen, sondern ein eigenes Control zu schreiben. Aber das kostet Zeit, vor allem wenn man sich die Grundlagen noch aneignen muss, und ist - wie immer mit GDI - nicht trivial. Darüber hinaus gibt ja so viele FlowChart-Controls auf dem Markt, dass bei einfachen Requirements die "make or buy"-Entscheidung recht einfach ausfallen sollte.Gruß
Marcel
- Bearbeitet Marcel RomaModerator Montag, 12. November 2012 14:49 P.S.
- Als Antwort vorgeschlagen Ionut DumaModerator Montag, 19. November 2012 13:13
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 21. November 2012 11:41
Alle Antworten
-
Was besser ist hängt davon ab, was es sonst noch für Randbedingungen vorliegen. Bei großen Datenmengen (Zeichenelementen), die sich nur selten ändern und, wenn ein häufiges Refresh erforderlich ist, ist das Zeichnen in ein Image ggf. günstiger. Unabhängig von der konkret genutzten Oberfläche kannst Du ja die Routine schreiben und dann Dir das Grafics-Objekt für Testzwecke von unterschiedlichen Oberflächen geben lassen und das Verhalten beurteilen.--
Viele Gruesse
Peter- Als Antwort vorgeschlagen Ionut DumaModerator Montag, 19. November 2012 13:14
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 21. November 2012 11:41
-
Hallo, ich halte das Panel für geeigneter, da es als reines ContainerElement fungiert.
Was das Flowchart an geht, hast du bereits viele Formen vorgegeben, die du zeichnen kannst und für alles wo es nichts vorgefertigtes gibt kann man auch noch spezielle Kurven und Polygone zeichnen.
Um etwas zu zeichnen solltest du das Paint-Event abfangen und dort drinn zeichnen. Wenn du etwas aktualisieren musst rufst du Invalidate auf, somit wird Paint erneut ausgelöst.Ein sehr ausführliches Tutorial gibt es hier. Das ist zwar schon etwas älter, abr von der Funktio her ist es bis heute gleich geblieben.
Koopakiller - http://koopakiller.ko.ohost.de/
- Als Antwort vorgeschlagen Ionut DumaModerator Montag, 19. November 2012 13:14
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 21. November 2012 11:41
-
Hallo zusammen,
Wenn man nicht über Control.CreateGraphics in die PictureBox zeichnet, ist es von der technischen Seite fast egal auf welche grafische Oberfläche gezeichnet wird. Eine grafische Oberfläche ist eine grafische Oberfläche. Punkt. Ich weiß, dass man unter VB auf PictureBox-en zeichnete, aber unter .NET kann man auf ein x-beliebiges Control zeichnen. Es gibt allerdings ein paar Dinge zu beachten:
PictureBox ist ein Steuerelement, das primär Bilder *anzeigt*. Es hat ein paar sehr nützliche Features, darunter auch die autom. Doppelpufferung, die bereits im Konstruktor von PictureBox aktiviert wird:
base.SetStyle(ControlStyles.Selectable | ControlStyles.Opaque, false);
base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.SupportsTransparentBackColor, true);Aber PictureBox hat auch viele Features, die sich ungünstig auf das Zeichnen auswirken können.
Panel hingegen ist ein einfacheres, von ScrollableControl abgeleitetes Steuerelement, das andere Stile setzt und nicht "von Haus aus" doppelt puffert, dafür aber sowohl das Zeichnen des Hintergrunds als auch des Vordergrunds im OnPaint-Ereignishandler ausführt:
base.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Selectable, false);
base.SetStyle(ControlStyles.SupportsTransparentBackColor, true);Wenn man die Größe des gezeichneten Bildes nicht verändern muss, kann man das gezeichnete Bild natürlich auch in einer PictureBox anzeigen. Sobald man aber Zooming, Skalierung etc. beim Zeichnen implementieren muss, ist Panel als grafische Oberfläche geeigneter, da einfacher und flexibler.
Control.CreateGraphics() solltest Du lieber mit PictureBox nicht verwenden. Das Zeichnen sollte auch beim Panel ausschließlich im Paint-Ereignis stattfinden.
Bob Powell - CreateGraphics. A boon or a curse?
http://www.bobpowell.net/picturebox.htmHow not to use the PictureBox control.
http://www.bobpowell.net/pictureboxhowto.htm
P.S. Am besten wäre es natürlich weder das eine noch das andere zu nehmen, sondern ein eigenes Control zu schreiben. Aber das kostet Zeit, vor allem wenn man sich die Grundlagen noch aneignen muss, und ist - wie immer mit GDI - nicht trivial. Darüber hinaus gibt ja so viele FlowChart-Controls auf dem Markt, dass bei einfachen Requirements die "make or buy"-Entscheidung recht einfach ausfallen sollte.Gruß
Marcel
- Bearbeitet Marcel RomaModerator Montag, 12. November 2012 14:49 P.S.
- Als Antwort vorgeschlagen Ionut DumaModerator Montag, 19. November 2012 13:13
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 21. November 2012 11:41
-
Hallo Marcel,
danke fuer die ausfuehrliche Antwort.
>Wenn man die Größe des gezeichneten Bildes nicht verändern muss, kann man das gezeichnete Bild >natürlich auch in einer PictureBox anzeigen. Sobald man aber Zooming, Skalierung etc. beim Zeichnen >implementieren muss, ist Panel als grafische Oberfläche geeigneter, da einfacher und flexibler.
Das ist wichtig, denn das ist in meiner App bestimmt der Fall.
>Darüber hinaus gibt ja so viele FlowChart-Controls auf dem Markt, dass bei einfachen Requirements >die "make or buy"-Entscheidung recht einfach ausfallen sollte.
Ich werde mich fuer das "make" entscheiden, da der flowchart nicht besonders umfangreich und schwierig
ist, ich glaub da lohnt sich die Anschaffung einer 3rd party software nicht.
Ausserdem muss man endlich auch mal in GDI+ reinkommen. Wenn man immer nur verschiebt, wirds ja
nie was.
Danke und Gruß, myamadeus.
-
Hallo myamadeus,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.