PictureBox updaten?
-
Hallo,
ich habe vor, ein ziemlich gewagtes Projekt anzugehen: Ein Diagramm über Windows Forms. Ich dachte mir das so, dass ich eine PictureBox verwende und dort hinein mit der GDI+ zeichne. Das Problem ist, die PictureBox zeigt dann nicht an, was ich gezechnet habe, sondern ein völlig unverändertes Bild...
Hier mein Code(vorerst nur mit einem marineblauen Rechteck):public: Form1(void) { //Konstruktorcode InitializeComponent(); //Image-Object Image ^X = Image::FromFile("Hintergrund.jpg"); //Graphics-Object Graphics ^g = Graphics::FromImage(X); gc->FillRectangle(Brushes::Navy,10,10,20,20); }
Könnte mir da jemand helfen
? Ich habe bereits mit Update(), Invalidate() und Region probiert, denke aber, dass ich dort auf dem falschen Pfad gelandet bin.
Gruß
LauritzG
-
Die Picturebox wird wohl bevorzugt das, was im Item "Image" abgelegt wurde anzeigen. Versuchs doch mal mit nem Panel.
Zumal Du in Deinem Beispielcode ein Image erzeugst, eine Grafik dafür erstellen lässt, auf die Zeichnest und dann.... Nix mit machst.
-
Hallo Knuddelbaer,
vielen Dank für die sehr schnelle und hilfreiche Antwort. Ich habe nun ein Panel gemacht, dessen BackgroundImage-Eigenschaft auf das Image-Objekt gelegt und man sieht nun ein kleines Navyblaues Rechteck am linken oberen Rand des Panels. Vielen Dank!!!Noch ein schönes Wochenende
LauritzG
-
Ich habe nun den Code von meinem Diagramm soweit fertig, ich poste ihn hier einmal:
public: Form1(void) { InitializeComponent(); DoubleBuffered = true; ResizeRedraw = true; array<int> ^f={8,6,8,7,9,8,4,5,6,7,8,6,7,5,6,7,8,7,6,5,6,7,6,7,6,7,6,7,6,7,5,5,6,7,8,6,7,8,6,7,8,9,7,6,5,6,7,8,9,5,6,4,6,5,7,6,7,6,5,6,5,4,5,6,7,8,7,6,5,4,5,6,7,8,7,6,5,4}; int x = 1; const int Ellipseh = 2; const int Ellipseb = 2; Image ^X = Image::FromFile("Background.jpg"); Graphics ^gc = Graphics::FromImage(X); for each(int i in f) { x+=1; Rectangle r(x,i+100-(i*2),2,2); gc->FillEllipse(Brushes::Black,r); delete r; }
Soweit, sogut. Ich implementiere gerade noch, dass man dann fünzig Datensätze zurücksetzt, bevor die Zeichnung den Rand des Bildes erreicht...um dann wieder die Hälfte des Bildes zur Verfügung zu haben.
Gruß
LauritzG
-
Hallo,
eine letzte Frage noch:
ich habe nun noch die Idee gehabt, mein DataSet als Quelle für die Zeichnung zu nehmen, und bastele daran jetzt schon Stunden herum:
Erst habe ich versucht, die DataSet::_1DataTable::columPreis direkt in die for each()-Schliefe einzubinden, das ging natürich nicht (wäre ja auch zu einfach gewesen ;-)). Dannn habe ich versucht, das ganze vorher in ein Array zu konvertieren, was auch nicht geklappt hat. Jetzt sind mir die Ideen ausgegangen. Ich hoffe, dass mir jemand helfen kann.
Hier mein Code:public: Main_Window(void) { InitializeComponent(); DoubleBuffered = true; int x = 1; array<int> ^f = DataSet::_1DataTable::columnPreis; bool repaint = false; Image ^X = Image::FromFile("X.jpg"); Graphics ^gc = Graphics::FromImage(X); for each(float i in f) { i= i*3; x = x+1; Rectangle r(x,i+100-(i*2),2,2); gc->FillEllipse(Brushes::Red,r); delete r; } panel1->BackgroundImage = X; }
Schönes Wochenende,
Lauritz