Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

11

27.01.2013, 18:11

Mh, das ist mir dann glaube ich zu kompliziert...

Ich werde es vorerst dabei belassen, alle Array-Elemente beim Ereignis PictureBox1-Paint neu zu zeichnen.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

12

27.01.2013, 18:11

Ich werde es vorerst dabei belassen, alle Array-Elemente beim Ereignis PictureBox1-Paint neu zu zeichnen.


Das meinte ich doch mit "oder du fängst das Paint-Event deiner Picturebox ab und zeichnest da."

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

13

27.01.2013, 18:19

Mit zu kompliziert meine ich

Zitat

Entweder du erstellst eine Klasse, die von Picturebox erbt und überschreibst die OnPaint Methode

Wobei es wahrscheinlich aufs gleiche herauslaufen würde...

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

14

16.02.2013, 11:57

Hallo Community,

meine Methode zeichnet jetzt alle Objekte wie gewünscht in das Panel, jedoch wenn ich die Methode noch mal aufrufe, wird es einfach übermalt. Wenn ich jetzt, bevor ich etwas zeichne, panel1.Invalidate(); ausführen lassen, sehe ich ab und zu kurz etwas aufblitzen, ansonsten bleibt das Panel aber leer.
Zudem hat meine Zeichen Methode am 200 Objekten (es sind nur Kreise) keine Wirkung mehr.

Ich habe mir noch einen Button eingefügt, mit dem ich "von Hand" panel1.Invalidate() auslösen kann, wenn ich es nicht beim Neuzeichnen mache. Das funktioniert auch, aber nur bis zu einer gewissen Anzahl von Objekten, danach passiert komischerweise nichts mehr.

Woran könnte das liegen?
Gibt es evtl. noch eine andere Vorgehensweise, wie man einfache Geometrische Objekte in WindowsForms anzeigen kann, außer mit GDI+?

Gruß,
MitgliedXYZ


Edit: Hier mal mein Code zum Neuzeichnen:

private void Aktualisierung()
{
for (int i = 1; i <= anzGewuenschteObjekte; i++)
{
ZeichneObject(objektX, objektY, i);
}
}


private void ZeichneObjekt(int x, int y, int number)
{
//Für den "Zoomfaktor" der Visualisierung
x = x / trackBar1.Value;
y = y / trackBar1.Value;

Pen p1 = new Pen(Color.Blue, 1);
panel1.CreateGraphics().DrawEllipse(p1, x, y, 1, 1);
p1.Color = Color.LightBlue;
if (cbKreise.Checked == true)
{
panel1.CreateGraphics().DrawEllipse(p1, x - (200 / trackBar1.Value), y - (200 / trackBar1.Value), 400 / trackBar1.Value, 400 / trackBar1.Value);
}
if (cbShowNR.Checked == true) //Wenn Nummern angezeigt werden sollen
{
panel1.CreateGraphics().DrawString(number.ToString(), new Font("Arial", 8.0f), new SolidBrush(Color.Blue), new PointF(x, y));
}
}

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »MitgliedXYZ« (16.02.2013, 12:22)


Yannic

unregistriert

15

16.02.2013, 12:18

Ja, es gibt eine andere Vorgehensweise, nennt sich WPF und ist schöner als Windows Forms(IMO). ;)
-> http://de.wikipedia.org/wiki/Windows_Pre…undation#Grafik

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

16

16.02.2013, 12:25

Ja, es gibt eine andere Vorgehensweise, nennt sich WPF und ist schöner als Windows Forms(IMO). ;)
-> http://de.wikipedia.org/wiki/Windows_Pre…undation#Grafik
Mein Programm ist aber schon etwas größer, die Visualisierung eigentlich nur eine Nebenfunktion. Mit WPF müsste ich doch noch mal fast komplett von vorne anfangen, da ich die meisten Funktionen leider nicht ausgelagert habe und einige Timer, etc. verwende.

Zitat Wikipedia:

Zitat

Windows-Forms-Steuerelemente können in WPF-Anwendungen benutzt werden; umgekehrt können auch WPF-Elemente in Windows Forms gehostet werden. Zudem unterstützt WPF Win32: WPF ist mittels Hosting auch in Win32-Code benutzbar und Win32-Code kann auch in WPF-Anwendungen weiterbenutzt werden.
Ich werde mal versuchen für die Darstellung der Objekt WPF zu benutzen...

Edit:
Am Einfachsten wäre es natürlich, wenn ich meinen jetzigen Code benutzen könnte. Sieht da evtl. jemand den Fehler? Gdi+ wird ja auch nicht sooo schlecht sein...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

17

16.02.2013, 13:03

Ja, es gibt eine andere Vorgehensweise, nennt sich WPF und ist schöner als Windows Forms(IMO). ;)
-> http://de.wikipedia.org/wiki/Windows_Pre…undation#Grafik

Was mit dem eigentlichen Problem REIN GAR NICHTS zu tun hat. Es gibt übrigens auch Java, das ist läuft sogar auf Embedded Systems! Gigantischer Vorteil, sofort umstellen. Überflüssige Anmerkung, wirklich.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Yannic

unregistriert

18

16.02.2013, 13:52

Naja, ich hab ihm eine Alternative vorgeschlagen, die nicht so behindert überspitzt und unnötig wie dein Post war. 8o
Er kann seine vorhandenen Sachen in WPF weiterbenutzen, nur den Code, der ihm sowieso Probleme bereitet muss umgeschrieben werden. ;)

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

19

16.02.2013, 15:39

Und kennt sich zufällig jemand mit der Integration von Wpf in WindowsForms aus?

Also ich würde gerne eine Ellipse zeichnen lassen, wie mit GDI+ auch. Doch wenn ich es so machen will wie hier (http://www.c-sharpcorner.com/uploadfile/…ellipse-in-wpf/) beschrieben, bekomme ich nur die Fehlermeldung: "Ellipse" konnte nicht gefunden werden. Fehlt eine Using-Direktive oder ein Assemblyverweis?
Die betreffende Codezeile: Ellipse blueRectangle = new Ellipse();
Ich habe dem Projekt einen Verweis zu System.Windows.Forms.Integration hinzugefügt und der Codedatei "using System.Windows.Forms.Integration;".
Und benutze einen Elementhost der im Panel angedockt ist.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

20

16.02.2013, 16:50

Naja, ich hab ihm eine Alternative vorgeschlagen, die nicht so behindert überspitzt und unnötig wie dein Post war. 8o

Behindert? Ich verstehe...
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige