C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■96416 / 親階層)  Labelを90度回転する方法
□投稿者/ Georgia (1回)-(2020/11/21(Sat) 17:58:22)

分類:[.NET 全般] 

VB.NETを使っております。

Labelを90度回転して表示させたいのですが、
https://stackoverflow.com/questions/1371943/c-sharp-vertical-label-in-a-windows-forms

このページにいくつかクラスが書かれてあります。

一つ目のコードを参考にして、

Imports System.ComponentModel

Partial Public Class VerticalLabel
    Inherits UserControl

    Public Sub New()
        InitializeComponent()
    End Sub






    Private _Text As String = ""

    <Description("(カスタム) コントロールに関連付けられたテキストです。"),
      Category("Appearance")>           '動作
    Public Property Text2() As String
        Get
            Return Me._Text
        End Get
        Set(value As String)
            Me._Text = value
        End Set
    End Property


    Private Sub VerticalLabel_SizeChanged(ByVal sender As Object, ByVal e As EventArgs)
        GenerateTexture()
    End Sub

    Private Sub GenerateTexture()

        Dim format As StringFormat = New StringFormat()
        format.Alignment = StringAlignment.Near
        format.LineAlignment = StringAlignment.Near
        format.Trimming = StringTrimming.EllipsisCharacter
        Dim img As Bitmap = New Bitmap(Me.Height, Me.Width)
        Dim G As Graphics = Graphics.FromImage(img)
        G.Clear(Me.BackColor)
        Dim brush_text As SolidBrush = New SolidBrush(Me.ForeColor)
        G.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit

        G.DrawString(Me.Text2, Me.Font, brush_text, New Rectangle(0, 0, img.Width, img.Height), format)

        brush_text.Dispose()
        img.RotateFlip(RotateFlipType.Rotate270FlipNone)
        Me.BackgroundImage = img

    End Sub

    Private Sub InitializeComponent()
        Me.SuspendLayout()
        '
        'VerticalLabel
        '
        Me.Name = "VerticalLabel"
        Me.Size = New System.Drawing.Size(55, 136)
        Me.ResumeLayout(False)

    End Sub

    Private Sub VerticalLabel_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        GenerateTexture()
    End Sub


End Class


このように書いてみたところ、うまく表示させることができました。

しかし、通常はVSのエディター上のLabelのプロパティで
Textを編集すると、即座にGUIに反映されるはずですが、
上のコードでText2を編集しても、外観がすぐに変化せず
一度ビルドしないと反映されません。



    Protected Overrides Sub OnPaint(e As PaintEventArgs)

            Dim format As StringFormat = New StringFormat()
        format.Alignment = StringAlignment.Near
        format.LineAlignment = StringAlignment.Near
        format.Trimming = StringTrimming.EllipsisCharacter
        Dim img As Bitmap = New Bitmap(Me.Height, Me.Width)

        Dim g As Graphics = e.Graphics

        g.Clear(Me.BackColor)
        Dim brush_text As SolidBrush = New SolidBrush(Me.ForeColor)
        G.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit

        G.DrawString(Me.Text2, Me.Font, brush_text, New Rectangle(0, 0, img.Width, img.Height), format)

        brush_text.Dispose()
        img.RotateFlip(RotateFlipType.Rotate270FlipNone)
            '  Me.BackgroundImage = img

    End Sub

こんな感じで、OnPaintの方に書くとすぐに反映されるのですが、
一度描画したら二度と変更することはないのに
ウインドウに変化があるたびに、OnPaintが呼び出されて再描画することになるため、
Me.BackgroundImageの方が使った方が良いのではないかと考えています。

Me.BackgroundImageを使った方法で、
エディター上での編集が即座に反映される方法があればお教えください。


編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
親記事 →Re[1]: Labelを90度回転する方法 /Hongliang
 
上記関連ツリー

Labelを90度回転する方法 / Georgia (20/11/21(Sat) 17:58) #96416 ←Now
Re[1]: Labelを90度回転する方法 / Hongliang (20/11/21(Sat) 18:13) #96418
  └ Re[2]: Labelを90度回転する方法 / Georgia (20/11/21(Sat) 19:12) #96420
    ├ Re[3]: Labelを90度回転する方法 / Hongliang (20/11/21(Sat) 20:11) #96422
    └ Re[3]: Labelを90度回転する方法 / Georgia (20/11/21(Sat) 19:50) #96421
      └ Re[4]: Labelを90度回転する方法 / Georgia (20/11/21(Sat) 21:05) #96423
        └ Re[5]: Labelを90度回転する方法 / Georgia (20/11/21(Sat) 21:05) #96424
          └ Re[6]: Labelを90度回転する方法 / Hongliang (20/11/21(Sat) 21:34) #96425
            └ Re[7]: Labelを90度回転する方法 / Georgia (20/11/21(Sat) 21:45) #96426
              └ Re[8]: Labelを90度回転する方法 / Hongliang (20/11/21(Sat) 22:35) #96427
                └ Re[9]: Labelを90度回転する方法 / Georgia (20/11/21(Sat) 22:59) #96428 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信