投稿者 るきお  (社会人) 投稿日時 2012/1/19 23:22:58
Window フォーム アプリケーションを作っているという前提を置きますね。
三角関数の計算が私には難しいので、計算が簡単な角度90度、180度、270度のサンプルを作ってみました。(つまり、斜めにはできません。)
これでも、ラベルは横長なので、「ABCDEFG」のような長い文字を90度回転させると大部分がLabelからはみ出してしまいます。つまり、Label自体を回転させているのではなく、Labelの中身を回転させています。
(WPFならLabelごと回転できます。)

まず、下の状態で一度実行して、すぐ終了させます。
そうするとツールボックスにFlipLabelというコントロールが追加されるのでフォームに配置します。
Public Class Form1
End Class

Public Class FlipLabel
    Inherits Label

    Public Sub Flip0()
        Me.Degree = 0
    End Sub
    Public Sub Flip90()
        Me.Degree = 90
    End Sub

    Public Sub Flip180()
        Me.Degree = 180
    End Sub

    Public Sub Flip270()
        Me.Degree = 270
    End Sub

    Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)

        Dim offsetX As Integer
        Dim offsetY As Integer
        Select Case Degree
            Case 90
                offsetX = (e.Graphics.MeasureString(Me.Text, Me.Font)).Width
            Case 180
                offsetX = (e.Graphics.MeasureString(Me.Text, Me.Font)).Width
                offsetY = (e.Graphics.MeasureString(Me.Text, Me.Font)).Height
            Case 270
                offsetY = (e.Graphics.MeasureString(Me.Text, Me.Font)).Height
        End Select

        e.Graphics.TranslateTransform(offsetX, offsetY)
        e.Graphics.RotateTransform(degree)
        e.Graphics.DrawString(Me.Text, Me.Font, New SolidBrush(Me.ForeColor), New Point(0, 0))

    End Sub

    Private degreeValue As Single
    Protected Property Degree As Single
        Get
            Return degreeValue
        End Get
        Set(value As Single)
            degreeValue = value
            Invalidate()
        End Set
    End Property

End Class


次に、フォームにボタンを3つ配置して以下のとおりプログラムします。
Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        FlipLabel1.Flip90()
    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        FlipLabel1.Flip180()
    End Sub

    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        FlipLabel1.Flip270()
    End Sub

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        FlipLabel1.Text = "58"
    End Sub
End Class


実行してボタンを押すと内容が90度、180度、270度の向きに変わります。
プログラムの中身は再計算が多くてちょっと効率が悪いので、パフォーマンスが気になるようなら一度計算した値を使いまわすようにすれば若干向上すると思います。


参考:WPFの場合、次のように簡単にLabel自体を回転できます。
以下は50度回転させる例です。
Label1.RenderTransform = New RotateTransform(50)


こういった表現力はWPFが有利ですね。