Autor Beitrag
ssb-blume
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 375
Erhaltene Danke: 7

XP, W7, W8
Deutschland
BeitragVerfasst: Sa 30.03.19 12:40 
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:
ausblenden 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 user profile iconTh69: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Titel geändert ("C#" entfernt und als Tag hinzugefügt).

_________________
Brain: an apparatus with which we think we think.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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.


Zuletzt bearbeitet von Th69 am Sa 30.03.19 14:54, insgesamt 1-mal bearbeitet
ssb-blume Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 375
Erhaltene Danke: 7

XP, W7, W8
Deutschland
BeitragVerfasst: Sa 30.03.19 14:52 
lt. MS:
aufruf (paint-ereignis):
ausblenden 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);

    //usw....

Hier ist der Teufel:
ausblenden 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 user profile iconTh69: C#-Tags hinzugefügt

_________________
Brain: an apparatus with which we think we think.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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:
ausblenden 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)
  {
    // ... (hier mal Haltepunkt setzen)
  }
}


PS: Ich hatte wohl zeitgleich mit deiner Antwort meinen obigen Beitrag noch mal nacheditiert. Hattest du das schon gelesen?
ssb-blume Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 375
Erhaltene Danke: 7

XP, W7, W8
Deutschland
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
                   String drawString = "Sample Text";

                    // Create font and brush.
                    Font drawFont = new Font("Arial"16);
                    SolidBrush drawBrush = new SolidBrush(Color.Black);

                    // Create point for upper-left corner of drawing.
                    float x = 150.0F;
                    float y = 50.0F;

                    // Set format of string.
                    StringFormat drawFormat = new StringFormat();
                    drawFormat.FormatFlags = StringFormatFlags.DirectionVertical;

                    // Draw string to screen.
                    e.Graphics.DrawString(drawString, drawFont, drawBrush, x, y, drawFormat);

_________________
Brain: an apparatus with which we think we think.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 30.03.19 16:41 
- Nachträglich durch die Entwickler-Ecke gelöscht -
ssb-blume Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 375
Erhaltene Danke: 7

XP, W7, W8
Deutschland
BeitragVerfasst: 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 user profile iconTh69: C#-Tags hinzugefügt

_________________
Brain: an apparatus with which we think we think.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 375
Erhaltene Danke: 7

XP, W7, W8
Deutschland
BeitragVerfasst: 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!

_________________
Brain: an apparatus with which we think we think.