- PR -

ASP.NETでのListBoxの2列表示について

投稿者投稿内容
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-02-14 22:41
引用:

Jittaさんの書き込み (2005-02-14 21:34) より:
 それは“空白”ですから、1個の0x20にならないとダメ、ってことでしょう。たぶん。改行コード、タブコード、空白コードが複数続く場合、1個の空白に置き換わるのが仕様です。


 つまりUnicodeの0x3000(Unicode以外の文字コードは略)が現れたら、これを「空白コード」と認識して、0x20と同じように扱うのがブラウザ本来の仕様で、そうならないのはIEのバグ、ていうことですか?だとしたら直さないで欲しいなぁ(^−^;
 手元にIEしかないので確認できないのが残念ですが、現行のNetscapeやFireFoxではどのように表示されるんでしょう?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-15 20:42
次のようなコードを実行してみてください。
コード:
' " "の中にはユニコードで0x3000
Dim r1 As New Text.RegularExpressions.Regex("\s", Text.RegularExpressions.RegexOptions.None)
Dim r2 As New Text.RegularExpressions.Regex("\s", Text.RegularExpressions.RegexOptions.ECMAScript)
If r1.Match(" ").Success Then Me.Label1.Text = "T" Else Me.Label1.Text = "F"
If r2.Match(" ").Success Then Me.Label1.Text += "T" Else Me.Label1.Text += "F"


結果は"TF"なんですね。

 それと、もう1つ、重要なことに気が付いています?プロポーショナルフォントでは、0x20の空白はほとんど幅がありませんが、0x3000は約1文字分…通じるよね?(^_^;…の幅があります。
 おそらく、0x20の空白は、単語などの「区切りを表すもの」であって、決まった幅の「間」ではない、ということでしょう。英文では両端揃えでしたっけ?ワードラップをして両端揃えをすると、行末に出来る余白を、行中の区切り位置に展開しますよね。そういう「区切り」を表すための空白であって、間を開けるための空白ではない、と考えてみましょう。
 すると、ユニコード0x3000の空白が約1文字分の幅を持っているのは重要なことです。なぜなら、日本語は「段落の最初は1文字分、字下げする」からです。英文でも字下げはありますが、幅は決まっていません。

 これから考えるに、0x3000を“区切りを表す空白”と定義すると、1つの空白に置き換えなければならない。“1文字分の幅を表す文字”と定義すると、置き換えてはいけない。と、なるんですかねぇ???

 こういう、“文化の違い”を意識しながらプログラムを作る必要があるのですね。。。

# こういうことを書いていると、試験問題の「n文字以内で答えなさい」
# が、非常に無意味なものに思えてきた(^o^;

_________________
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-02-15 21:58
 ListBox上の表示の話から文化の違いの話になってしまいましたね(^^;でもこうゆう話はたいへん興味深いです。勉強になりますm(_ _)m

 話を本題に戻してしまいますが、ここでは全角スペースの本来の存在意義はおいといて、あくまでやりたいことを実現するための手段として活用できないか、という話です。
 察するところ、siroutoさんがやりたいのは、例えばコードと商品名を並べて表示させたい、その時に商品名の左端がずれないようにしたい、ということですよね。多分。

001 みかん
002 バナナ
003 りんご

 こんな感じで。このようにコード部の幅が等しければ、スペース1個で十分だと思います。問題は、コード部の幅が異なるとき。

f01  みかん
f02  バナナ
f03  りんご
v001 キャベツ
v002 白菜
d0001 お茶
d0002 ジュース

 連続した半角スペースは表示上1個になってしまう。かといって を使うと&がHTMLエンコードされてしまう…
 この時全角スペースが詰められずに「1文字分」として表示できるなら、これを利用してコードが3桁のとこは半角スペース+全角スペース、4桁のとこは全角スペース、5桁のとこは半角スペース、とすればきれいに揃うのかな、と。(勿論等幅フォントを使います)

私の言いたかったのはそういうことでした。

スキルアップ/キャリアアップ(JOB@IT)