Laden...

Dynamisch veränderbarer Graph

Erstellt von RitterChristian vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.083 Views
R
RitterChristian Themenstarter:in
137 Beiträge seit 2007
vor 15 Jahren
Dynamisch veränderbarer Graph

Hallo nochmal community,

ich benötige einen Graphen, den der User dynamisch selbst ändern kann.
Als beispiel hier der "Vibrato-Graph" von Guitar Pro 5:

siehe Anhang

Ich will so ein Control erstellen, auf dem der User eben neue punkte einfügen und auch wieder löschen kann (mit mausklick), und der graph dann die Linien selbstständig verbindet, so dass es sinn macht, wie auf dem Bild beispielsweise gezeigt.

Danke im Voraus!

P.S. Ich hab forum gesucht, aber nichts gefunden was mir hilft 🙁

Projekte:
http://code.google.com/p/freeminerdotnet/ - MMORPG-Maker im grafischen Stile von Minecraft
http://code.google.com/p/directzzt/ - ZZT Remake mit eigenen Ideen

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo RitterChristian,

eigentlich müsste es sowas auf www.codeproject.com geben.

herbivore

R
RitterChristian Themenstarter:in
137 Beiträge seit 2007
vor 15 Jahren

Hallo herbivore,

hab aber nach langer suche nichts gefunden 🙁
sonst hätte ich hier nicht gepostet.

Aber wenn hier jemand was weiß, wäre echt schön 🙂

Projekte:
http://code.google.com/p/freeminerdotnet/ - MMORPG-Maker im grafischen Stile von Minecraft
http://code.google.com/p/directzzt/ - ZZT Remake mit eigenen Ideen

Gelöschter Account
vor 15 Jahren

mach es doch selbst. sowas macht echt spaß.....

3.430 Beiträge seit 2007
vor 15 Jahren

HI,

wenn du in Codeproject nach chart suchst, dann findest du sehr viele Controls, welche irgendwelche Diagramm darstellen können. Vielleicht ist da ja eines für deine Zwecke geeignet.

An sonsten wirst du das wohl selbst zeichnen müssen.

mfg
michlG

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo RitterChristian,

mach es doch selbst. sowas macht echt spaß.....

... und selbst ohne Spaß ist sowas auf Basis von [Tutorial] Zeichnen in Windows-Programmen (Paint/OnPaint, PictureBox) und [Tutorial] Gezeichnete Objekte mit der Maus verschieben schnell gemacht.

herbivore

R
RitterChristian Themenstarter:in
137 Beiträge seit 2007
vor 15 Jahren

Herbi, ich habs versucht und NUR DAS kommt heraus. Vs geht mir langsam auf den Sack!

von wegen spaß! Spaß stell ich mir anders vor und nicht so!
Warum Serialisieren? Will ich dochgar nicht und selbst wenn ich das serialisier klappts nicht.

Denn die fehler sind...

siehe Anhang

Was soll denn das? Kommt bei jedem neuen projekt! Hier der Code:

  public class GraphControl : Panel {

    private List<GraphNode> _nodes;

    public List<GraphNode> Nodes {
      get { return _nodes; }
      set { _nodes = value; }
    }

    public GraphControl() {
      this._nodes = new List<GraphNode>();

     // FEHLER WEGEN "DOUBLEBUFFER" ....!
      
      this.SetStyle( ControlStyles.DoubleBuffer |
                ControlStyles.UserPaint |
                ControlStyles.AllPaintingInWmPaint |
                ControlStyles.SupportsTransparentBackColor |
                ControlStyles.ResizeRedraw , true );
    }

    protected override void OnPaint( PaintEventArgs e ) {
      base.OnPaint( e );

      Graphics g = e.Graphics;

      foreach ( GraphNode node in this._nodes ) {
        node.Draw( g );
      }
      g.Dispose();

    }
}
public class GraphNode {

    private Point _location;
    private GraphicsPath _path;

    public GraphNode(Point location) {
      this._location = location;

    }


    public void Draw( Graphics g ) {

      g.DrawRectangle( new Pen( Brushes.Black ) , new Rectangle(
        this._location.X - 3 , this._location.Y - 3 , 6 , 6 ) );
      g.FillRectangle( Brushes.Black , new Rectangle(
        this._location.X - 3 , this._location.Y - 3 , 6 , 6 ) );

    }

  }

Exakt, das ist der ganze komplette code, nicht mehr und nciht weniger! Und selbst hier schafft es VS, mir mehrere Fehler auf einmal zu geben. Warum, ist unklar, da es EXAKT so vorher hunderte male geklappt hat. Ich bins leid langsam mit dem VS...

Und immer wenn ich DoubleBuffer aktiver, warum kommt der fehler "invalid operation"?

Wo liegt denn jetzt wieder der fehler?

Projekte:
http://code.google.com/p/freeminerdotnet/ - MMORPG-Maker im grafischen Stile von Minecraft
http://code.google.com/p/directzzt/ - ZZT Remake mit eigenen Ideen

1.361 Beiträge seit 2007
vor 15 Jahren

Hi RitterChristian.

erst einmal würd ich das g.Dispose() in deiner überschriebenen OnPaint methode unterlassen, schließlich erzeugst du das Graphics-Object ja nicht. Also woher nimmst du dir das Recht es zu zerstören ? 😉

Und zweitens: Wenn du schon von vorhandenen Controls erbst, fummel lieber nich so viel an irgendwelchen Flags rum, sondern setz die dazugehörigen Properties "DoubleBuffered", bzw "ResizeRedraw", usw.
So wirds auch im MSDN empfohlen.

Es wird eben nicht empfohlen von existierenden Controls zu erben und dann heimlich die SetStyle eigenschaften zu ändern. Immerhin lässt du ja mit base.OnPaint(e) trotzdem noch das Panel selber zeichnen.

Ich zitiere MSDN: "Das Aufrufen der SetStyle-Methode empfiehlt sich nur für benutzerdefinierte Steuerelemente, für die Sie den gesamten Renderingcode geschrieben haben."

Dann klappts auch ohne Fehler 😉

beste Grüße
zommi

Gelöschter Account
vor 15 Jahren

ich halte in diesem fall das panel auch für das falsche basecontrol. meiner meinung nach soltlest du direkt von control erben und evtl noch das scrolableinterface reinziehen.

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo RitterChristian,

und was die Fehlermeldung angeht, kennzeichne doch GraphNode einfach als Serializable, wenn der Designer das so will. Die Fehlermeldungen sind jedenfalls sehr eindeutig.

Hallo JAck30lena,

was stört dich an Panel? Ich finde es unproblematisch Panel zu verwenden. Natürlich könnte man je nach Bedarf auch Control oder ScrollableControl verwenden, aber Panel geht eben auch gut.

herbivore

Gelöschter Account
vor 15 Jahren

gerade wenn man alle möglichen styles setzen/verändern möchte, dann bietet es sich an lieber die baseklassen zu nehmen.

ach ja:

ControlStyles.AllPaintingInWmPaint |
                ControlStyles.SupportsTransparentBackColor 

die sind beim panel z.b. auf false gesetzt.
und:

ControlStyles.SupportsTransparentBackColor

ist bereits auf true gesetzt.

sonst ist gegen panel prinzipiell nichts entgegenzusetzen.

R
RitterChristian Themenstarter:in
137 Beiträge seit 2007
vor 15 Jahren

Ich hab aber noch ein anderes problem.

Herbivore, wenn du das lösen kannst, bist du Gott. Oder zumindest so etwas ähnliches, denn ich bekomme Fehler, die BEI GLEICHER VORGEHENSWEISE früher nicht passiert sind. Lies weiter...

Es scheint, als wäre auf einmal der "Doublebuffer" kaputt. Denn seit neuestem sorgt diese Zeile für schweres Kopfzerbrechen von Visual Studio (2005 Pro UND 2008 Team Suite):

ControlStyles.OptimizedDoubleBuffer

Dann sagt er: "Ungültiger Parameter" und keine weiteren Fehlermeldungen.

Entferne ich die obige Zeile, klappt alles.

this.DoubleBuffered = true;

erzeugt den **exakt **selben Fehler!

Ehrlich leute, ich verstehs nicht. Es hat vor zwei monaten oder so (als ichs das letzte mal gecheckt hab), einwandfrei funktioniert! Aber seit neuestem unnachvollziehbarer Weise klappts nicht!

In einer so teuren Software sind das Fehler die einfach nicht passieren dürfen. Und mit dem "... nicht serialisierbar ..." hat der auch erst vor kurzem angefangen. Es ist zum Mäusemelken.

EDIT: Ich will hier nicht rumbolzen, ich hab nichts gegen Microsoft, Visual Studio oder sonstwas. Aber (wie gesagt), bei solchen micker-fehlern die einfach nicht passieren sollten für so viel Geld werd ich grantig. Das verstärkt sich noch dadurch dass ich so die ganze Zeit vorgegangen bin, eins zu eins!

Bitte helft mir, ich find sowas zum k.... ihr wisst schon.

Projekte:
http://code.google.com/p/freeminerdotnet/ - MMORPG-Maker im grafischen Stile von Minecraft
http://code.google.com/p/directzzt/ - ZZT Remake mit eigenen Ideen

Gelöschter Account
vor 15 Jahren

also ich hatte noch nie einen vergleichbaren fehler.

tritt der fehler zur laufzeit auf? oder im designer. wen nes im designer ist, dann lösche mal den obj-ordner vom projekt.

P
48 Beiträge seit 2008
vor 15 Jahren

Hi RitterChristian,

warum so umständlich? Es gibt doch für das Zeichnen von Graphen schon die sehr gute Bibliothek von ZedGraph.
Diese ist mächtig genug, damit du deine Probleme damit lösen kannst.

hier hast den Source und ein Wiki.

Grüße,

psy