Entwickler-Ecke
Multimedia / Grafik - DrawString Error
ssb-blume - Sa 30.03.19 12:40
Titel: DrawString Error
Hallo,
ich verzweifele noch!
in einer PictureBox wird ein Raster gezeichnet und in den Schnittstellen ein Kreis. -Alles OK-
Jetzt soll noch ein Text gezeichnet werden, wobei
font,
brush und
point ok sind:
C#-Quelltext
1:
| G.DrawString("", drawFont, drawBrush, P); |
OK!!!! kein Fehler-
Sobald auch nur 1 Buchstabe im Text ist, wird das schöne rote Kreuz gezeichnet (ErrorImage);
Ich finde keinerlei Hinweise im Internet, Ihr seid meine einzige Hoffnung!
Hansi
Moderiert von Th69: C#-Tags hinzugefügt
Moderiert von Th69: Titel geändert ("C#" entfernt und als Tag hinzugefügt).
Th69 - Sa 30.03.19 14:42
Wird das ErrorImage für die gesamte PictureBox angezeigt oder nur dort, wo du den Text zeichnen möchtest?
Zeigst du denn auch über Eigenschaft Image ein Bild an (denn nur, wenn das Laden des Bildes fehlschlägt sollte das ErroImage angezeigt werden)?
Und was für einen Font und Brush verwendest du denn?
PS: Wenn du nur alles selber zeichnest, dann nimm statt der PictureBox besser ein Panel.
ssb-blume - Sa 30.03.19 14:52
lt. MS:
aufruf (paint-ereignis):
C#-Quelltext
1: 2: 3: 4: 5: 6:
| private void GM_Paint(object sender, PaintEventArgs e) { e.Graphics.SmoothingMode = SmoothingMode.HighQuality; Rectangle Show = new Rectangle(GM.Location, GM.Size);
|
Hier ist der Teufel:
C#-Quelltext
1:
| G.DrawString(s, drawFont, drawBrush, Pointer p); |
Fragen beantworten:
1) gesamte Imagebox
2)
Font drawFont = new Font("Arial", 10.0F, FontStyle.Bold)
3)
SolidBrush drawBrush = new SolidBrush(Color.Black);
Wenn die Zeichenkette s leer ist, ist alles OK!!!!!
Zeichenkette s ="ABC": -- ERROR --
der Pointer liegt mit Sicherheit in ImageBox.
Hansi
Moderiert von Th69: C#-Tags hinzugefügt
Th69 - Sa 30.03.19 15:31
Was genau meinst du mit "pointer"?
Als 4. Parameter für
DrawString wird eine Position (
PointF) angegeben.
Ich hatte erst vermutet, daß du einen speziellen
Font verwendest und dieser evtl. Probleme macht, aber bei "Arial" sollte dies wohl nicht passieren.
Edit:
Was mir noch einfällt - es könnte auch sein, daß das "ErrorImage" angezeigt wird, wenn innerhalb der
Paint-Methode eine
Exception auftritt.
Fange diese mal selbst und schau (im Debugger) nach:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| private void GM_Paint(object sender, PaintEventArgs e) { try { } catch (Exception ex) { } } |
PS: Ich hatte wohl zeitgleich mit deiner Antwort meinen obigen Beitrag noch mal nacheditiert. Hattest du das schon gelesen?
ssb-blume - Sa 30.03.19 16:38
Ich habe nun den Text aus dem Beispiel von MS genommen. Auch da tritt der Fahler auf, wenn Text nit lee ist
Das Anzeigeelement ist nun auch Panel;
Beim catch wird "falscher Parameter gezeigt", leider nicht welcher. Wird der text auf "" gesetzt, tritt der Fehler nicht auf.
Hier der MS-Text:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| String drawString = "Sample Text";
Font drawFont = new Font("Arial", 16); SolidBrush drawBrush = new SolidBrush(Color.Black);
float x = 150.0F; float y = 50.0F;
StringFormat drawFormat = new StringFormat(); drawFormat.FormatFlags = StringFormatFlags.DirectionVertical;
e.Graphics.DrawString(drawString, drawFont, drawBrush, x, y, drawFormat); |
Delete - Sa 30.03.19 16:41
- Nachträglich durch die Entwickler-Ecke gelöscht -
ssb-blume - So 31.03.19 09:02
Ja...
Eine dazwischen geschaltete Variable
Graphics G = e.Graphics ist wohl hier der Urheber.
Es ist bloß komisch, dass alle anderen grafischen Elemente (rechteck, linien..) angezeigt werden ohne Fehler.
Vielen Dank also nochmals!
Hansi
Moderiert von Th69: C#-Tags hinzugefügt
Th69 - So 31.03.19 09:35
Das kann nicht die Ursache sein, denn das ist einfach nur eine Referenz (sonst würde kein einziger C#-Code funktionieren).
Daß bei einem leeren String "" kein Fehler passiert, ist einfach nur, weil dann auch nichts gezeichnet wird.
Bzgl. "Falscher Parameter": dann debugge mal die gesamte Paint-Methode und wenn wirklich bei DrawString diese Exception kommt, dann schau dir mal die einzelnen übergebenen Werte (direkt im Debugger Variablen-Fenster) an.
Welche C#-Version (d.h. welches VS) und welche .NET-Version verwendest du denn?
PS: Du solltest alle Ressourcen (wie Font oder Brush) wieder korrekt "disposen", d.h. Dispose() aufrufen oder aber noch besser in eine using-Anweisung packen.
Noch besser ist es, diese Variablen als Klassenmember zu definieren (static readonly), so daß die Ressource-Objekte nicht bei jedem Paint-Aufruf generiert (und wieder gelöscht) werden.
ssb-blume - Mo 01.04.19 09:34
Danke nochmals!
Zitat: |
Das kann nicht die Ursache sein, denn das ist einfach nur eine Referenz (sonst würde kein einziger C#-Code funktionieren). |
1. ich habe im Quelltext nur geändert: statt G.Drawstring.. e.Graphis.Drawstring... und schon funktioniert es!
Zitat: |
PS: Du solltest alle Ressourcen (wie Font oder Brush) wieder korrekt "disposen", d.h. Dispose() aufrufen oder aber noch besser in eine using-Anweisung packen. |
2. natürlich , hier war alles nur in einer Routine zusammengefasst wegen besserer kontrolle, -debugging. Sämtliche Parameter wurden im Debug-Modus korrekt angezeigt.
3. VS 2017 Community, Version 15.8.8
Danke nochmals!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!