DOBON.NETプログラミング道掲示板

■35177 / 親記事)  Labelで文字単位の背景色
  
□投稿者/ ま〜 一般人(9回)-(2022/10/19(Wed) 13:09:57)
  • アイコン環境/言語:[basic] 
    分類:[.NET] 

    こんいちは
    Labelで文字単位の反転文字をしたいのですが(特定の文字だけ協調したい)
    こんな事はRichTextで無いと無理なのでしょうか?

マルチポストを報告
違反を報告
引用返信 削除キー/
■35179 / ResNo.1)  Re[1]: Labelで文字単位の背景色
□投稿者/ 魔界の仮面弁士 大御所(1461回)-(2022/10/19(Wed) 15:24:03)
  • アイコン
    No35177に返信(ま〜さんの記事)
    > こんいちは
    おはこんばんちは
    
    
    > Labelで文字単位の反転文字をしたいのですが(特定の文字だけ協調したい)
    > こんな事はRichTextで無いと無理なのでしょうか?
    
    WinForms だと、LinkLabel で代用するとかですかね…。
    本来の目的とは違いますけれども。
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        LinkLabel1.Text = "こんいちは → こんにちは"
        LinkLabel1.Links.Add(2, 1).Description = "間違い"
        LinkLabel1.Links.Add(5, 3).Enabled = False
        LinkLabel1.Links.Add(10, 1).Visited = True
        LinkLabel1.ForeColor = Color.Black
        LinkLabel1.LinkColor = Color.Red
        LinkLabel1.DisabledLinkColor = Color.Blue
        LinkLabel1.VisitedLinkColor = Color.Green
        LinkLabel1.LinkBehavior = LinkBehavior.NeverUnderline
    End Sub
    
    
    素の Label で実装するなら、継承して OnPaint をオーバーライドするか
    Label の Paint イベントを使うぐらいでしょうか。
    
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'Label1.Text = "こんいちは"
        Label1.Font = New Font("MS ゴシック", 18.0F)
        Label1.Text = "こん ちは"
        Label1.ForeColor = Color.Navy
    End Sub
    
    Private Sub Label1_Paint(sender As Object, e As PaintEventArgs) Handles Label1.Paint
        If Label1.UseCompatibleTextRendering Then
            e.Graphics.DrawString("  い  ", Label1.Font, Brushes.Crimson, e.ClipRectangle)
        Else
            TextRenderer.DrawText(e.Graphics, "  い  ", Label1.Font, e.ClipRectangle, Color.Crimson)
        End If
    End Sub
    
    
    WPF の Label なら Label.Content に TextBlock を置いてみるとか。
    
    <Label HorizontalAlignment="Left" VerticalAlignment="Top">
      <TextBlock>
        <Run>こん</Run><Run Foreground="Red">い</Run><Run>ちは</Run>
      </TextBlock>
    </Label>

違反を報告
引用返信 削除キー/
■35180 / ResNo.2)  Re[1]: Labelで文字単位の背景色
□投稿者/ 魔界の仮面弁士 大御所(1462回)-(2022/10/19(Wed) 16:34:54)
  • アイコンNo35177に返信(ま〜さんの記事)
    > 特定の文字だけ協調したい
    失礼しました。文字色ではなく背景色でしたね。

    TextRenderer.DrawText 等で、自前で部分的に背景色を付ける事もできますが、
    位置調整も面倒なので、TextBox や RichTextBox で代用するとかですかね。


    TextBox1.BorderStyle = BorderStyle.None
    TextBox1.HideSelection = False
    TextBox1.BackColor = SystemColors.Control
    TextBox1.Cursor = Cursors.Default
    TextBox1.ScrollBars = ScrollBars.None
    TextBox1.TabStop = False
    TextBox1.ReadOnly = True
    TextBox1.Text = "こんいちは"
    TextBox1.Select(2, 1)


    RichTextBox1.BorderStyle = BorderStyle.None
    RichTextBox1.HideSelection = True
    RichTextBox1.BackColor = SystemColors.Control
    RichTextBox1.Cursor = Cursors.Default
    RichTextBox1.ScrollBars = ScrollBars.None
    RichTextBox1.TabStop = False
    RichTextBox1.ReadOnly = True
    RichTextBox1.ShortcutsEnabled = False
    RichTextBox1.Text = "こんいちは"
    RichTextBox1.Select(2, 1)
    RichTextBox1.SelectionBackColor = SystemColors.Highlight
    RichTextBox1.SelectionColor = SystemColors.HighlightText
    RichTextBox1.SelectAll()
    RichTextBox1.SelectionProtected = True
    RichTextBox1.Select(0, 0)


    ただしこの場合、キーボードやマウス操作で選択状態を変更できてしまいます。
    かといって Enabled = False だと、淡色表示になってしまうが悩ましい所。
違反を報告
引用返信 削除キー/
■35181 / ResNo.3)  Re[2]: Labelで文字単位の背景色
□投稿者/ 魔界の仮面弁士 大御所(1463回)-(2022/10/19(Wed) 17:10:24)
  • アイコンNo35180に追記(魔界の仮面弁士の記事)
    > TextBox や RichTextBox で代用するとかですかね。
    > ただしこの場合、キーボードやマウス操作で選択状態を変更できてしまいます。
    > かといって Enabled = False だと、淡色表示になってしまうが悩ましい所。

    Enabled は True のままにしておいて、
    Enter イベントか GotFocus イベントで、
    非アクティブにしてしまえば、何とかなるかな?

    Private Sub TextBox1_GotFocus(sender As Object, e As EventArgs) Handles TextBox1.GotFocus
      ActiveControl = Nothing
    End Sub


    本当は、そもそもフォーカスを受け取らないようにするか、
    あるいはせめて、前回フォーカスのあったコントロールに戻す方が
    望ましいのですけれど…ひとまず手抜き実装ということで。
違反を報告
引用返信 削除キー/
■35182 / ResNo.4)  Re[3]: Labelで文字単位の背景色
□投稿者/ KOZ 一般人(4回)-(2022/10/20(Thu) 05:37:05)
  • アイコン
    No35181に返信(魔界の仮面弁士さんの記事)
    > 本当は、そもそもフォーカスを受け取らないようにするか、
    > あるいはせめて、前回フォーカスのあったコントロールに戻す方が
    > 望ましいのですけれど…ひとまず手抜き実装ということで。
    
    RichTextBox を非表示にして親に描画するとか。
    
    Public Class Form1
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            RichTextBox1.Visible = False
            RichTextBox1.Text = "こんにちは!"
            RichTextBox1.SelectionStart = 5
            RichTextBox1.SelectionLength = 1
            RichTextBox1.SelectionColor = Color.White
            RichTextBox1.SelectionBackColor = Color.Red
        End Sub
    
        Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
            Using bmp As New Bitmap(RichTextBox1.Width, RichTextBox1.Height)
                RichTextBox1.DrawToBitmap(bmp, New Rectangle(New Point(0, 0), RichTextBox1.Size))
                e.Graphics.DrawImage(bmp, RichTextBox1.Location)
            End Using
        End Sub
    
    End Class
    

違反を報告
引用返信 削除キー/
■35183 / ResNo.5)  Re[4]: Labelで文字単位の背景色
□投稿者/ KOZ 一般人(5回)-(2022/10/20(Thu) 11:42:04)
  • アイコンNo35182に返信(KOZの記事)
    > RichTextBox を非表示にして親に描画するとか。

    https://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/RichTextBox.cs,1804

    RichTextBox の DrawToBitmap は機能しなかったのを思い出しました。
    このコードは .NET Framework 4.7 以上だと動きますが 4.6.2 以下だと動きません。
    ま〜さんがお使いの環境によっては、この手は使えません。失礼しました。

違反を報告
引用返信 削除キー/
■35184 / ResNo.6)  Re[5]: Labelで文字単位の背景色
□投稿者/ KOZ 一般人(6回)-(2022/10/21(Fri) 08:15:12)
  • アイコンNo35183に返信(KOZさんの記事)
    > このコードは .NET Framework 4.7 以上だと動きますが 4.6.2 以下だと動きません。
    > ま〜さんがお使いの環境によっては、この手は使えません。失礼しました。

    .NET Framework 4.0 以降であれば、app.config をいじれば大丈夫のようです。

    https://lets-csharp.com/richtextbox-image/

違反を報告
引用返信 削除キー/
■35186 / ResNo.7)  Re[6]: Labelで文字単位の背景色
□投稿者/ ま〜 一般人(10回)-(2022/10/21(Fri) 14:04:58)
  • アイコン魔界さんKOZさんありがとうございます
    センター配置でFontサイズが変動するのでBOXだと入れ物が決まってしないつかいづらかっらので
    Labelだと枠がないのでLabelでなんとかならないかと思っていました
    教えて頂いた内容で解決しました。
    いつもありがとうございます

解決み!
違反を報告
引用返信 削除キー/



スレッド内ページ移動 / << 0 >>

このスレッドに書きこむ

Mode/  Pass/


- Child Tree -