VB.Net PrintDocument Text rechts ausrichten

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Jannis22.

    VB.Net PrintDocument Text rechts ausrichten

    Hallo Community!

    Ich habe mal wieder ein Problem :thumbdown:
    Ich habe ein PrintDocument und zwei Variablen (Name und Datum).
    Nun möchte ich, dass im PrintDocument Name und Datum in einer Zeile sind, jedoch nur, dass der Name am linken Rand des Dokuments steht und
    das Datum am rechten Rand. Also so: (| sind die Ränder des Dokuments)
    |Max Mustermann 21.10 2015|

    Und so geht es ja los:
    e.Graphics.DrawString(Name & Datum, New Font("Arial", 14, FontStyle.Regular), Brushes.Black, 75, 75)
    Doch in dem Fall stehen ja Name und Datum direkt aneinander.

    Wie mache ich jetzt, dass der Name links steht und das Datum rechts?

    Danke im Vorraus!!!!
    LG

    Jannis22 schrieb:

    Wie mache ich jetzt, dass der Name links steht und das Datum rechts?
    Graphics.DrawString() hat (mindestens) eine Überladung, in der Du das Ziel-Rechteck vorgeben kannst.
    Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also mit z.B 10,10 kann ich natürlich die Position bestimmen, aber es sind ja unterschiedlich viele Zeichen, einmal 9, einmal 10,...und die Position ist ja die des ersten Zeichens...
    Könntet ihr mir vllt etwas unter die Arme greifen, wie ich den Text rechts ausrichte?
    Bin leider nicht schlauer geworden Rod :(

    LG
    jo, Knackpunkt wird sein, dass du vmtl. nicht weißt was eine Überladung ist, noch, wo du nachgucken kannst, welche Überladungen es gibt - evtl. hast du vom Begriff Objekt selbst einen falschen Begriff.

    Ich weiß jetzt auch nicht, wie vorgehen - natürlich kann man dir ein paar Zeilen vorsetzen zum einpasten, und iwann funztes dann vielleicht, aber schlauer im Sinner von schlauer macht dich das erst recht nicht.

    Jannis22 schrieb:

    nicht schlauer
    Mach diesen Elementartest:

    VB.NET-Quellcode

    1. Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
    2. Dim g = e.Graphics
    3. Dim txt = "bla bla bla"
    4. Dim font = New Font("Arial", 18)
    5. Dim size = g.MeasureString(txt, font)
    6. g.DrawString(txt, font, Brushes.Blue, Me.ClientRectangle.Width - size.Width, 10)
    7. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ah, Me.ClientRectangle.Width, die Blattweite, das habe ich gesucht, danke!

    Wie bekomme ich jetzt aber den Text in die Mitte? So habe ich es bereits versucht, der Text war aber nicht genau in der Mitte:

    VB.NET-Quellcode

    1. e.Graphics.DrawString(txt, font, Brushes.Blue, Me.ClientRectangle.Width / 2 - (size.Width / 2) , 10


    ​Kann mir da vielleicht nochmals jemand helfen
    ​Danke im Vorraus!!:thumbsup:

    Jannis22 schrieb:

    nicht genau in der Mitte
    Bei mir schon:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
    2. Dim g = e.Graphics
    3. Dim txt = "bla bla bla"
    4. Dim font = New Font("Arial", 18)
    5. Dim size = g.MeasureString(txt, font)
    6. g.DrawString(txt, font, Brushes.Blue, Me.ClientRectangle.Width - size.Width, 10)
    7. g.DrawString(txt, font, Brushes.Blue, 0, 110)
    8. g.DrawString(txt, font, Brushes.Blue, (Me.ClientRectangle.Width - size.Width) / 2, 210)
    9. End Sub
    10. Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles MyBase.Resize
    11. Me.Invalidate()
    12. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    TextAlignment gibt man aber besser einfach mittels StringFormat an, statt sich da in Rechnungen zu vertiefen.

    VB.NET-Quellcode

    1. Private _sfCenter As New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center}
    2. private _Ft as New Font("Arial", 18) 'nicht in jedem Paint einen neuen Font erstellen (ohne zu disposen)
    3. Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
    4. Dim txt = "bla bla bla"
    5. e.Graphics.DrawString(txt, _Ft, Brushes.Blue, Me.ClientRectangle, _sfCenter)
    6. End Sub