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

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

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

labelのフォントサイズの調整方法について

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■94740 / inTopicNo.1)  labelのフォントサイズの調整方法について
  
□投稿者/ zzz (1回)-(2020/05/12(Tue) 09:25:24)

分類:[.NET 全般] 


お世話になっております。

Visual Studio2010(VB.net)にてWindows Formを作成しています。

csvファイルから読み込んだデータが
漢字のときはフォントサイズを10、カタカナと英数字のときはフォントサイズを12、と言った風にlabelのフォントサイズを調整したいのですが可能でしょうか?

csvファイルから読み込んだデータのバイト数によってlabelのフォントサイズの調整を行っていますが
バイト数が同じであっても漢字の場合とカタカナや英数字の場合でlabelに収まる収まらないが変わってきます。
引用返信 編集キー/
■94742 / inTopicNo.2)  Re[1]: labelのフォントサイズの調整方法について
□投稿者/ 魔界の仮面弁士 (2710回)-(2020/05/12(Tue) 10:21:50)
No94740 (zzz さん) に返信
> 漢字のときはフォントサイズを10、カタカナと英数字のときはフォントサイズを12、と言った風にlabelのフォントサイズを調整したいのですが可能でしょうか?

Label は、単一フォントの指定しかできませんので、そのままでは無理ですね。

(案1)複数の Label を並べて表現する
(案2)OnPaint をオーバーライドするなどして、文字列を自力描画する
(案3)Label の代わりに、読み取り専用な RichTextBox や WebBrowser を利用する

https://dobon.net/vb/dotnet/graphics/drawstring.html
https://www.codeproject.com/Articles/6491/RichTextLabel-WinForms-Control



> バイト数が同じであっても漢字の場合とカタカナや英数字の場合でlabelに収まる収まらないが変わってきます。
AutoSize では駄目なのですね?

文字幅を揃えたいのならば、等幅フォント(たとえば "MS ゴシック" など)を使えば、
ある程度揃えやすいかと思います。(改行を含む場合はワードラップに留意する必要がありますが)
引用返信 編集キー/
■94744 / inTopicNo.3)  Re[2]: labelのフォントサイズの調整方法について
□投稿者/ zzz (2回)-(2020/05/12(Tue) 12:14:01)
No94742 (魔界の仮面弁士 さん) に返信

返信ありがとうございます。

上記の質問に至った経緯として、
ラベルサイズを固定し、フォントがその中に収まるようにしたかったためです。

そのために文字数が多いものについてはフォントサイズを小さくなるように調整しましたが、
フォントサイズを小さくしすぎてしまうと漢字が見にくくなってしまうため
文字の種類ごとにフォントサイズを調整する方法がないかどうか質問させていただきました。


引用返信 編集キー/
■94745 / inTopicNo.4)  Re[3]: labelのフォントサイズの調整方法について
□投稿者/ 魔界の仮面弁士 (2711回)-(2020/05/12(Tue) 13:05:13)
No94744 (zzz さん) に返信
> フォントサイズを小さくしすぎてしまうと漢字が見にくくなってしまうため
> 文字の種類ごとにフォントサイズを調整する方法がないかどうか質問させていただきました。

だったら逆に、漢字の方を大きくした方が良いと思いますよ?

>>> 漢字のときはフォントサイズを10、カタカナと英数字のときはフォントサイズを12、と言った風に


いずれにせよ、Label そのものは Font を 1 種類しか割り当てられないので、
先の案のように何らかの回避策を講じる必要があるでしょう。
引用返信 編集キー/
■94746 / inTopicNo.5)  Re[3]: labelのフォントサイズの調整方法について
□投稿者/ furu (33回)-(2020/05/12(Tue) 14:54:51)
No94744 (zzz さん) に返信
> ■No94742 (魔界の仮面弁士 さん) に返信
> 文字の種類ごとにフォントサイズを調整する方法がないかどうか質問させていただきました。
1つのラベルで文字の種類ごとにフォントサイズを変えられたとしても
厳密には文字毎にサイズが違いますので、フォントサイズを決めるのは難しいと思います。

私は印刷で固定長の枠に印刷する場合に
最大のフォントサイズ(例えば12ポイント)から
フォントサイズを下げていき(例えば0.5ポイントずつ)
Graphics.MeasureStringで
枠内に収まる最大のフォントサイズ探しています。
引用返信 編集キー/
■94748 / inTopicNo.6)  Re[4]: labelのフォントサイズの調整方法について
□投稿者/ 魔界の仮面弁士 (2712回)-(2020/05/12(Tue) 15:41:18)
No94745 (魔界の仮面弁士) に追記
>>フォントサイズを小さくしすぎてしまうと漢字が見にくくなってしまうため
>>文字の種類ごとにフォントサイズを調整する方法がないかどうか質問させていただきました。
> いずれにせよ、Label そのものは Font を 1 種類しか割り当てられないので、
> 先の案のように何らかの回避策を講じる必要があるでしょう。

別案として、マーキー表示なら Label のサンプル。
文字を小さくせずに表現できます。ただ、可読性という点では…。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=11243No94742 (魔界の仮面弁士) に追記
> (案3)Label の代わりに、読み取り専用な RichTextBox や WebBrowser を利用する

RichTextBox の例

Option Strict On
Public Class Form1
    Private NormalTextFont As Font
    Private SpecialTextFont As Font

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        NormalTextFont = New Font("MS UI Gothic", 10.0F)
        SpecialTextFont = New Font("MS UI Gothic", 12.0F)

        RichTextBox1.Multiline = False
        RichTextBox1.WordWrap = False
        RichTextBox1.Text = "csvファイルから読み込んだデータが漢字のときはフォントサイズを10、カタカナと英数字のときはフォントサイズを12、と言った風にlabelのフォントサイズを調整したいのですが可能でしょうか?"

        'RichTextBox1.Multiline = True
        'RichTextBox1.WordWrap = True
        'RichTextBox1.Lines = New String() {
        '    "csvファイルから読み込んだデータが",
        '    "漢字のときはフォントサイズを10、カタカナと英数字のときはフォントサイズを12、と言った風にlabelのフォントサイズを調整したいのですが可能でしょうか?"
        '}

        RichTextBox1.BorderStyle = BorderStyle.None
        RichTextBox1.BackColor = SystemColors.Control
        RichTextBox1.ReadOnly = True
        RichTextBox1.ScrollBars = RichTextBoxScrollBars.None
        RichTextBox1.TabStop = False
        RichTextBox1.Font = NormalTextFont
        RichTextBox1.ForeColor = Color.Red
        AddHandler RichTextBox1.GotFocus, Sub() Me.ActiveControl = Nothing
        'RichTextBox1.Cursor = Cursors.Default


        'カタカナと英数字のフォントを変更する
        '他の文字種(半角/全角形の場合や記号など)の扱いを変えたければ、適宜調整してみてください
        RichTextBox1.Visible = False
        For i = 0 To RichTextBox1.TextLength
            RichTextBox1.Select(i, 1)
            Dim c As Char = RichTextBox1.SelectedText.FirstOrDefault()
            If RichTextBox1.SelectedText Like "[ァ-ー0-9a-zA-Z]" Then
                RichTextBox1.SelectionFont = SpecialTextFont
            End If
        Next
        RichTextBox1.Visible = True
    End Sub
End Class

引用返信 編集キー/
■94750 / inTopicNo.7)  Re[4]: labelのフォントサイズの調整方法について
□投稿者/ 774RR (787回)-(2020/05/12(Tue) 15:54:23)
そういう場合は長い文字列の全部の文字を表示する必要はなくて
最初と最後だけわかれば事足りちゃったりするので
https://dobon.net/vb/dotnet/graphics/stringtrimming.html
http://bbs.wankuma.com/index.cgi?mode=al2&namber=80357&KLOG=136
とか。

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ