podes hacerlo con saltos de lineas entre cada letra, pero queda horrible el codigo, es mejor crearte un control que maneje por si solo el texto, aca tenes una clase sacada de internet, la cual dibuja el texto:
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Windows.Forms
Imports System.Drawing
Public Class VerticalLabel
Inherits Label
Public Sub New()
SetStyle(ControlStyles.UserPaint, True)
SetStyle(ControlStyles.AllPaintingInWmPaint, True)
SetStyle(ControlStyles.DoubleBuffer, True)
Me.AutoSize = False
End Sub
Private Sub CalculateSize(ByVal value As String)
Me.AutoSize = False
Dim height As Integer = 0
Dim width As Integer = 0
Dim sizeTemp As New Size()
For Each c As Char In value
sizeTemp = TextRenderer.MeasureText(c.ToString(), Me.Font)
height += sizeTemp.Height
If sizeTemp.Width > width Then
width = sizeTemp.Width
End If
Next
Me.Height = height
Me.Width = width
End Sub
Public Overrides Property Text() As String
Get
Return MyBase.Text
End Get
Set(ByVal value As String)
MyBase.Text = value
CalculateSize(value)
End Set
End Property
Public Overrides Property Font() As Font
Get
Return MyBase.Font
End Get
Set(ByVal value As Font)
MyBase.Font = value
CalculateSize(MyBase.Text)
End Set
End Property
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
Dim br As New SolidBrush(Me.ForeColor)
Dim smt As New StringFormat()
smt.Alignment = StringAlignment.Center
Dim sizeTemp As New Size()
Dim i As Integer = 0
For Each c As Char In Text
sizeTemp = TextRenderer.MeasureText(c.ToString(), Me.Font)
Dim rc As New Rectangle(0, sizeTemp.Height * i, sizeTemp.Width, sizeTemp.Height)
e.Graphics.DrawString(c.ToString(), Font, br, rc, smt)
i += 1
Next
br.Dispose()
End Sub
End Class
eso lo pones en una clase y despues te va a aparecer el control en la barra de herramientas como si fuera un control, lo unico que tenes que hacer es arrastrarlo al formulario, y cambiarle el texto que quieras y se va a mostrar vertical.
saludos.