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

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

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

Re[6]: labelの文字サイズ設定


(過去ログ 143 を表示中)

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

■83585 / inTopicNo.1)  labelの文字サイズ設定
  
□投稿者/ Ark (1回)-(2017/03/29(Wed) 20:47:19)

分類:[C#] 

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

当方、visualstudio2015にて書いております。

c#のlabelに関して
英数字のときはフォントサイズを10、日本語のときはフォントサイズを12、と言った風にlabelのフォントサイズを調整したいのですが可能でしょうか?

このlabel内の文字はtextboxで書き換え可能です。
引用返信 編集キー/
■83586 / inTopicNo.2)  Re[1]: labelの文字サイズ設定
□投稿者/ Hongliang (516回)-(2017/03/29(Wed) 20:51:03)
WinFormですか?
両方含まれる場合は文字ごとに調整するのですか?
全角英数とかはどういう扱いでしょうか?
ギリシャ文字みたいな英数字とも日本語とも言えないようなのはどういう扱いでしょうか? 記号類の場合は?

といった所は疑問点としてすぐ出てきますが、とりあえず設定すればOKみたいなのはないので、Paintイベントで自分で描画することになるでしょう。
引用返信 編集キー/
■83587 / inTopicNo.3)  Re[1]: labelの文字サイズ設定
□投稿者/ WebSurfer (1194回)-(2017/03/29(Wed) 20:53:32)
No83585 (Ark さん) に返信

何を作っているのですか? Windows Forms? WPF? ASP.NET Web アプリ? その他?

そのぐらいのことは最初の質問に書きましょうよ
引用返信 編集キー/
■83588 / inTopicNo.4)  Re[2]: labelの文字サイズ設定
□投稿者/ Ark (2回)-(2017/03/29(Wed) 21:10:22)
失礼しました。
Windows Formsを作っています。
文字に関して曖昧だったので、考え直しました。

全角の場合フォントサイズを12、半角の場合フォントサイズを10と言った感じで調整したいと思います。

両方含まれる時にどうすればいいか衝突したために質問させていただきました。
引用返信 編集キー/
■83589 / inTopicNo.5)  Re[3]: labelの文字サイズ設定
□投稿者/ Azulean (810回)-(2017/03/29(Wed) 21:51:31)
No83588 (Ark さん) に返信
> 両方含まれる時にどうすればいいか衝突したために質問させていただきました。

Hongliang さんが書かれている通り、「Paintイベントで自分で描画することになるでしょう」のまま変わらないので、自分で頑張って、文字列を画面に描く処理を実装するしかないです。
引用返信 編集キー/
■83590 / inTopicNo.6)  Re[3]: labelの文字サイズ設定
□投稿者/ 魔界の仮面弁士 (1227回)-(2017/03/29(Wed) 22:02:49)
2017/03/29(Wed) 23:07:09 編集(投稿者)

No83588 (Ark さん) に返信
> 全角の場合フォントサイズを12、半角の場合フォントサイズを10と言った感じで調整したいと思います。
> 両方含まれる時にどうすればいいか衝突したために質問させていただきました。

Word なんかだと、「英数字用のフォント」「日本語用のフォント」を
個別に設定できますが、System.Windows.Forms.Label のコントロールには
そういった機能が用意されていません。

なので No83586 でも書かれていますが、別々の Font を組み合わせて自分で描画するとか、
あるいは 複数の Label を微調整して並べて誤魔化すしかありません。

文字によって 10pt 相当と 12pt 相当の文字が混在しているようなフォントファイルが
事前に用意さえていれば、話は単純なのかもしれませんが。



以下蛇足:


> 全角の場合フォントサイズを12、半角の場合フォントサイズを10

それぞれの文字が全角なのか半角なのかを、
どのように定義付けするのかも、難しい問題だったり。


Shift_JIS の文字集合に限って考えてよいのなら、話を単純化できそうなのですが、
0x8540〜0x869E の区画には、PC-9800 などで使われていた「2バイト半角文字」が
あったりしますし。(まぁ、C# では扱えない範囲の文字なのですけれども)


C# が扱う文字集合は、ご存知のように Unicode をベースとしていますが、
Unicode で全角・半角という定義付けをする場合、下記の資料が良く使われます。

http://www.unicode.org/Public/UNIDATA/EastAsianWidth.txt

この表にはセミコロン「;」で区切られた行が並んでいます。「#」以降はコメントです。
それぞれの行はセミコロンで区切られた 3 つのフィールドを持ち、
Field 0: Unicode のコードポイント
Field 1: 東アジアにおける「横幅」を表すプロパティ値。
Field 2: Unicodeの文字名
を意味しています。

この Field 1 は、下記の 6 種の値を取ります。
 Na(Narrow)
 W(Wide)
 H(Half Width)
 F(Full Width)
 N(Not Asian)
 A(Ambiguous)

Na/H は半角、W/F は全角と考えて良いと思いますが、問題はそれ以外。

そもそも日中韓の文字集合に無い N(Not Asian) の文字や、
文字幅が文脈依存の文字である A(Ambiguous) を定義し難いのです。

ちなみに文字幅 N な文字としては、
HTML の "&nbsp;" で知られる折り返し禁止スペース(U+00A0) や
HTML の "&#8203;" なゼロ幅スペース(U+200B)などの特殊空白、
身近に見るものではコピーライト記号(U+00A9)などがあります。

文字幅 A の文字としては、
Hongliang さんが書かれていたギリシャ文字(U+03B1 "α" など)や
ロシア語(U+0434 "д" など)、あるいは数学記号類(U+221A "√")や
U+203B "※"、U+2190 "←"、U+2605 "★" などの記号類があります。
下記の合成文字種などもこのグループですね。


// ここの掲示板は Unicode を扱えないので
// エスケープシーケンス表記にしています。
label1.Text = "Tokyo";
label2.Text = "To\u0302kyo\u0302"; // サーカムフレックス
label3.Text = "To\u0304kyo\u0304"; // マクロン
引用返信 編集キー/
■83592 / inTopicNo.7)  Re[4]: labelの文字サイズ設定
□投稿者/ Ark (3回)-(2017/03/29(Wed) 23:05:48)
Paintイベントで文字を描写することは出来ました。が、やはり魔界の仮面弁士が言うように、文字の識別が思うようにできません。

よく使うような文章を識別したいので、普段使わない文字は使わないと考えて良いのですが、いい方法はないでしょうか?

引用返信 編集キー/
■83593 / inTopicNo.8)  Re[5]: labelの文字サイズ設定
□投稿者/ 魔界の仮面弁士 (1228回)-(2017/03/29(Wed) 23:10:14)
No83592 (Ark さん) に返信
> が、やはり魔界の仮面弁士が言うように、
(^_^;)

> 文字の識別が思うようにできません。
10pt 表記にしたい文字種はどの程度でしょうか?

たとえば、Shift_JIS でいうところの 0x20〜0x7e, 0xa1〜0xdf の範囲に限るなら、
数もそれほど多くないので、変換テーブルを設けることはできますよね。



引用返信 編集キー/
■83599 / inTopicNo.9)  Re[6]: labelの文字サイズ設定
□投稿者/ furu (88回)-(2017/03/30(Thu) 11:20:15)
No83593 (魔界の仮面弁士 さん) に返信
> たとえば、Shift_JIS でいうところの 0x20〜0x7e, 0xa1〜0xdf の範囲に限るなら、
> 数もそれほど多くないので、変換テーブルを設けることはできますよね。

いつも使っているメソッドです。ご参考までに

        /// <summary>
        /// 半角?
        /// </summary>
        public static bool Is半角(
                        char    文字)
        {
            int    n = (int)文字;

            return
                    (n >= 0x0020 && n <= 0x007E)    ||
                    (n >= 0xFF61 && n <= 0xFF9F);
        }

引用返信 編集キー/
■83622 / inTopicNo.10)  Re[6]: labelの文字サイズ設定
□投稿者/ Ark (4回)-(2017/03/31(Fri) 09:00:32)
No83593 (魔界の仮面弁士 さん) に返信
> ■No83592 (Ark さん) に返信
>>が、やはり魔界の仮面弁士が言うように、
> (^_^;)
>

もうしわけありません。"さん"が抜けておりました。
不愉快に思われてしまったと思います。すみませんでした。

やはり、文字の種類を絞って範囲で認識するのが、1番手っ取り早いのですかね。
試行錯誤してみようと思います。
みなさんありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -