Laden...

Wie kann ich eine andere Positionsreferenz x,y für .DrawString() etc. unter GDI+ bestimmen?

Erstellt von stefanpc81 vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.344 Views
S
stefanpc81 Themenstarter:in
24 Beiträge seit 2017
vor 6 Jahren
Wie kann ich eine andere Positionsreferenz x,y für .DrawString() etc. unter GDI+ bestimmen?

Hallo,

wenn ich folgenden Quellcode verwende, wird der Text "TAT" auf x=160,y=15 px ab der Referenz von Form1 genommen. Ich möchte aber, dass der Nullpunkt die linke obere Ecke bspw. von pictureBox1 oder eines Panels ist. Die Referenz soll also ein Objekt sein, welches ja wiederum irgendwo auf der Form1-Fläche definiert wurde.
Warum will ich nicht einfach die Werte addieren und direkt eingeben? Weil ich mir offen halten will, die Referenz des Nullpunktes der pictureBox o.ä. später während des Programmierens ändern zu können, ohne Tausend Änderungen für die .DrawString() o.ä. -Objekte vornehmen zu müssen.

Graphics EICAS_1bis8 = CreateGraphics();
EICAS_1bis8.DrawString("TAT", font9, pinsel, 160, 15);

Vielen Dank für Antworten.
Grüße,
Stefan

4.931 Beiträge seit 2008
vor 6 Jahren

Mittels Control.PointToScreen kannst du die absoluten Screenkoordinaten ermitteln, d.h. wenn du also die Differenz zur Form berechnest, erhältst du die relativen Koordinaten:


Point p = PointToScreen(control.Location) - (Size)PointToScreen(form.Location);

(es gibt nur einen Differenz-Operator (Point, Size), aber Point ist in Size umwandelbar).

PS: Wegen CreateGraphics() lies mal [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox), d.h. du solltest nur im Paint-Ereignis zeichnen (und da erhält man die Graphics-Referenz als Parameter übergeben: e.Graphics).

S
stefanpc81 Themenstarter:in
24 Beiträge seit 2017
vor 6 Jahren

Ich habe es inzwischen anders gelöst:

Bitmap EICAS_1bis8_b = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics EICAS_1bis8_g = Graphics.FromImage(EICAS_1bis8_b);
EICAS_1bis8_g.DrawString("TAT", font9, pinsel_blau, 0, 0);
pictureBox1.Image = EICAS_1bis8_b;