Labelを90度回転させてデザイナーに貼り付けたい
投稿者 るきお  (社会人)
投稿日時
2012/1/19 23:22:58
Window フォーム アプリケーションを作っているという前提を置きますね。
三角関数の計算が私には難しいので、計算が簡単な角度90度、180度、270度のサンプルを作ってみました。(つまり、斜めにはできません。)
これでも、ラベルは横長なので、「ABCDEFG」のような長い文字を90度回転させると大部分がLabelからはみ出してしまいます。つまり、Label自体を回転させているのではなく、Labelの中身を回転させています。
(WPFならLabelごと回転できます。)
まず、下の状態で一度実行して、すぐ終了させます。
そうするとツールボックスにFlipLabelというコントロールが追加されるのでフォームに配置します。
次に、フォームにボタンを3つ配置して以下のとおりプログラムします。
実行してボタンを押すと内容が90度、180度、270度の向きに変わります。
プログラムの中身は再計算が多くてちょっと効率が悪いので、パフォーマンスが気になるようなら一度計算した値を使いまわすようにすれば若干向上すると思います。
参考:WPFの場合、次のように簡単にLabel自体を回転できます。
以下は50度回転させる例です。
こういった表現力はWPFが有利ですね。
三角関数の計算が私には難しいので、計算が簡単な角度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が有利ですね。
投稿者 zz6989  (社会人)
投稿日時
2012/1/20 06:24:20
おはようございます。早速のお返事ありがとうございます。
今日はこれから、出勤ですので詳しく見ることができないので、帰宅後にもう1度返信させてください。
勝手言って申し訳ありません。
今日はこれから、出勤ですので詳しく見ることができないので、帰宅後にもう1度返信させてください。
勝手言って申し訳ありません。
投稿者 ZZ6989  (社会人)
投稿日時
2012/1/20 22:26:23
こんばんは、情報不足ですいません。るきお先生のおっしゃるとうりWindow フォーム アプリケーションを選択しています。それとバージョンはVB2010EXPRESSです。
いつも親切なお返事有難う御座います。
今計画しているCADはJISのボルトの図面を出力するもので、ねじの呼び径と長さを入力するとボルトの詳細寸法が表示されるもので、90度回転させる部分が3箇所ありますが、そのうち1箇所は通常の向きでも可なので、2箇所のみ90度回転させようと思います、但し1箇所は数字がカンマを含めて4文字ありますのでここは90度回転のLabelを2個くっつけてカバーしようと思います。
先生の講座でコントロールを作る方法がどこかに出ていましたが、今回先生が書いてくださったプログラムは私には難解ですが、いずれ理解できるときがくると思いますので、今回はこのまま使わせて頂こうと思います。
WPFは全然わかりませんのでこちらはパスしたいと思います。(VB中学校のようなわかりやすい教科書が見当たりません)
これからもよろしくお願いします。有難う御座いました。
いつも親切なお返事有難う御座います。
今計画しているCADはJISのボルトの図面を出力するもので、ねじの呼び径と長さを入力するとボルトの詳細寸法が表示されるもので、90度回転させる部分が3箇所ありますが、そのうち1箇所は通常の向きでも可なので、2箇所のみ90度回転させようと思います、但し1箇所は数字がカンマを含めて4文字ありますのでここは90度回転のLabelを2個くっつけてカバーしようと思います。
先生の講座でコントロールを作る方法がどこかに出ていましたが、今回先生が書いてくださったプログラムは私には難解ですが、いずれ理解できるときがくると思いますので、今回はこのまま使わせて頂こうと思います。
WPFは全然わかりませんのでこちらはパスしたいと思います。(VB中学校のようなわかりやすい教科書が見当たりません)
これからもよろしくお願いします。有難う御座いました。
超簡単な機械加工用のCADのプログラムを作成していますが、普通CADの図面の場合、寸法は見る方向に向けて数字が記入されていますので、私もそれにならってLabelを使用して数字を横向きに表示したり、斜めに表示したりしようと思っていますが、いろいろ調べましたがどうしてもその方法がわかりません。
ちょうどWinsowsのフォトギャラリーとかムービーメーカーの回転ボタンで90度回転させるような感じで数字を90度回転させて表示したいのですが。
入門レベルの知識しかありませんので、できれば簡単な方法を教えて頂きたいのですが、よろしくお願いします。