Control text align (Ausrichtung) in Schleife abfragen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Mabbi.

    Control text align (Ausrichtung) in Schleife abfragen

    Hi,

    ich ersetze grade eine Form Ausdruck per screenshot in dem ich die Form in einer Grafik nachzeichne um eine bessere Druckqualität zu erreichen.

    Dies ist der aktuelle Code, der auch schon ganz passable Ergebnisse liefert:

    VB.NET-Quellcode

    1. Dim gr As Graphics = e.Graphics
    2. Dim schwarz As New Pen(Brushes.Black, 1)
    3. 'Aussenrahmen zeichenn
    4. Dim marg As Rectangle = e.MarginBounds
    5. gr.DrawRectangle(schwarz, marg.X, marg.Y, marg.Width, marg.Height)
    6. 'ALLE Label und Textboxen
    7. For Each ctrl As Control In Me.Controls
    8. ' MAGICs müssen HIER noch raus
    9. Dim pX1 As Integer = CInt(Math.Round((ctrl.Left * 1.25) + MarginLeft ))
    10. Dim pY1 As Integer = CInt(Math.Round((ctrl.Top * 1.25) + MarginTop ))
    11. Dim pX2 As Integer = CInt(Math.Round((ctrl.Width * 1.25) ))
    12. Dim pY2 As Integer = CInt(Math.Round((ctrl.Height * 1.25)))
    13. 'Pixellänge des Textes ermitteln
    14. Dim size As SizeF = gr.MeasureString(ctrl.Font.Name, ctrl.Font)
    15. If TypeOf ctrl Is Label Then
    16. 'Text
    17. gr.DrawString(ctrl.Text, New Font(ctrl.Font.Name, ctrl.Font.Size, ctrl.Font.Style), Brushes.Black, pX1, pY1)
    18. End If
    19. If TypeOf ctrl Is ComboBox Then
    20. 'Box
    21. gr.DrawRectangle(schwarz, pX1, pY1, pX2 , pY2)
    22. 'Text
    23. gr.DrawString(ctrl.Text, New Font(ctrl.Font.Name, ctrl.Font.Size, ctrl.Font.Style), Brushes.Black, pX1, pY1)
    24. End If
    25. If TypeOf ctrl Is TextBox Then
    26. 'Box
    27. gr.DrawRectangle(schwarz, pX1, pY1, pX2, pY2)
    28. 'Text
    29. gr.DrawString(ctrl.Text, New Font(ctrl.Font.Name, ctrl.Font.Size + 1, ctrl.Font.Style), Brushes.Black, pX1, pY1)
    30. End If
    31. Next
    32. 'Aufräumen
    33. gr.Dispose()


    Nun möchte ich in der Schleife

    VB.NET-Quellcode

    1. For Each ctrl As Control In Me.Controls


    das text alignment des Controls abfragen und mit dem Wert size.width

    VB.NET-Quellcode

    1. Dim size As SizeF = gr.MeasureString(ctrl.Font.Name, ctrl.Font)


    den Text korrekt positionieren.

    Hier stecke ich fest.

    ctrl.textalign gibt es aber nicht und ctrl.text.xxxx führt auch zu nicht sinnvollem ?

    Wie komme ich in dieser Schleife an die Positionierung des Textes in dem Control ran, ich würde gerne die mit dem Wert Center" identifizieren.

    Vielen Dank vorab für Eure Hilfe.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Mabbi“ ()

    Dann müsstest Du erstmal ctrl in ein passendes Control casten. Denn ein Control-Objekt selber hat diese Properties eben nicht.
    Du fragst ja eh schon den Typ ab, dann musst Du es konkret fortsetzen:

    VB.NET-Quellcode

    1. If TypeOf ctrl Is Label Then
    2. Dim TempLabel = DirectCast(ctrl, Label)
    3. gr.DrawString(TempLabel.Text, New Font(ctrl.Font.Name, ctrl.Font.Size, ctrl.Font.Style), Brushes.Black, pX1, pY1)
    4. End If
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.