[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 848
  • Last Modified:

Center Text Verically and Horizontal in a rich text box

hello all,
i am making a little flash card app to help me with some studying, im wondering how do i center the text vertically and horizontally in the text box? is there a way or do i need to use another control? i wanting the text to appear as if it was on a note card like a regular flash card, with the text in the middle.

Thanks for the help
0
designwitt
Asked:
designwitt
  • 2
1 Solution
 
ladarlingCommented:
Horizontal is easy...

With RichTextBox1
.Text = "Hello"
.SelectAll()
.SelectionAlignment = HorizontalAlignment.Center
End With
vertical is a pain in the %$#^&&*.
You could just 'draw' the text centered on any control you want, provided that you dont need to select / copy / paste from it.
Here is a method that will draw centered to a panel control named Panel1. You could modify it to draw to any control that has a .CreateGraphics() method...
 

    Public Sub DrawText(ByVal dText As String)
        Dim g As Graphics
        g = Panel1.CreateGraphics
        Dim centerPoint As New Point(Panel1.Width / 2, Panel1.Height / 2)
        Dim drawPoint As New Point
        Dim textSize As SizeF
 
        Dim myFont As New Font("Tahoma", 20, FontStyle.Bold, GraphicsUnit.Pixel)
        textSize = g.MeasureString(dText, myFont, Panel1.Size, StringFormat.GenericDefault)
        drawPoint.X = centerPoint.X - (textSize.Width / 2)
        drawPoint.Y = centerPoint.Y - (textSize.Height / 2)
 
        g.DrawString(dText, myFont, Brushes.Blue, drawPoint)
    End Sub

Open in new window

0
 
designwittAuthor Commented:
cool, yeah that worked great, is there way to make it stay in the panel? like wordwrap or something? because when i put a long definition in there it just runs off the side.

Thanks
0
 
ladarlingCommented:
The best way to handle that would probably be to pre-format the text prior to passing it to the draw function. This will take a little design forethought, though, since font size will really determine the breakpoints of the text. I slapped this together really quickly, and I call it in the first line of the DrawText function. The basic premise is to insert a carriage return near a space where your text would 'overrun' the panel. The draw method can handle the multiple lines, it just a matter of breaking them where needed.

    Private Function WrapText(ByVal theText As String) As String
        'The test value (20) would change with font size, here its an arbitrary example.
        'It assumes that only around 20 characters will fit on a 'line', 
        'and we should break the text somewhere near that.
        'If we were needing to break multiple times, you could rewrite this as
        'loop, replacing a space around 20, 40, 60, and so forth.
 
        If theText.Length > 20 Then
            'Lets find a space to break at
            Dim spcLoc As Integer = InStr(15, theText, " ") 'Start looking for a space at character 15
            If spcLoc > 0 Then
                theText = theText.Insert(spcLoc, vbCrLf)
            End If
        End If
        Return theText
 
    End Function

Open in new window

0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now