Paint-Event funktioniert nicht

Andrej85

Mitglied
Hallo zusammen,

ich erstelle eine grafische Oberfläche welche u.a. 2 PixtureBoxen beinhaltet. PictureBox1 ist ziemlich groß und PictureBox3 ist eher klein. Die PictureBox3 soll einen (rechteckig ausgeschnittenen) Bereich von der PictureBox1 vergrößert darstellen.

Mein Code sieht wie folgt aus:

Code:
private: System::Void pictureBox3_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) 
		 {		 
		 e->Graphics->ScaleTransform(3.0F, 3.0F);
			 e->Graphics->DrawImage(this->pictureBox2->Image, Rectangle(-15, -15, this->pictureBox3->ClientSize.Width, this->pictureBox3->ClientSize.Height),
				 Rectangle(this->sx , this->sy , 60, 60), GraphicsUnit::Pixel);
			  
			 this->pictureBox3->Invalidate();	
		 }

Das Problem ist nur dass das Programm abstürzt nachdem ich ausgeführt habe.
Fehler: "Visual C++ 2008 Express Edition
Eine nicht behandelte Ausnahme des Typs
"System.ArgumentNullException" ist in System.Drawing.dll aufgetreten.
Zusätzliche Informationen: Der Wert darf nicht NULL sein. "

Wenn ich aber ein neues Projekt öffne und nur mit zwei Pictureboxen arbeite dann funktioniert es wunderbar. Ich kann in die eine Picturebox ein bild reinladen und in der anderen vergrößert er mir das mit dem selben Code wie oben genannt.



Was kann das sein?
Bitte um Hilfe.

Gruß Andreas
 
Hallo,

Kann es sein das du in einer Endlos-Rekursion festhängst, da du im Paint nochmal Invalidate aufrufst? Invalidate löst soweit ich mich erinnern kann ja das Paint aus.
Wenns das nicht ist müsstest du bitte das ganze Projekt hier dranhängen, damit mans probieren kann.
 
Ich vermute das im PictureBox2 kein Image gesetzt ist, weshalb die DrawImage Methode eine ArgumentNullException schmeißt.

ArgumentNullException ist eigentlich die standard Exception wenn Klassenobjekte für eine Methode erwartet werden die nicht null sein dürfen.
Und alle anderen Parameter der DrawImage Methode sind ValueTypes, weshalb bei dennen diese Exception nicht kommen dürfte.
 
Vielen Dank für die Antworten,

Spyke du hast es richtig erkannt da war wirklich kein image gesetzt.

Wenn ich in die PictureBox beispielsweise ein paar Linien usw. zeichne wie kann ich die denn aufrufen****
Im Image werden die nicht abgelegt das habe ich schon versucht....aber wo dann****?


Gruß Andreas
 
Hallo,

Wenn du über die Graphics-Schnittstelle Linien zeichnest werden die nirgends gespeichert, sondern nur auf die GUI gezeichnet. Wenn du kein Bild brauchst in der PictureBox kannst du stattdessen z.B.: ein Panel verwenden, das braucht kein Image.
 
Wenn ich in die PictureBox beispielsweise ein paar Linien usw. zeichne wie kann ich die denn aufrufen****
Im Image werden die nicht abgelegt das habe ich schon versucht....aber wo dann****?

PictureBox1 Paint Ereignis hat deine normale zeichen Routine implementiert?
Am einfachsten wäre es dann diesen Methodenbody einfach in eine extra methode zu packen die als Parameter ein Graphics Objekt gesetzt hat.

Dann kannst das jeweilige Graphics Object von PitcureBox1 oder PictureBox3 übergeben.
Und deine Methode in den Ereignissen aufrufen.

Alternativ könntest du auch direkt in eine Bitmap zeichnen.
 

Neue Beiträge

Zurück