none
Labelに全角ハイフンが表示できない RRS feed

  • 質問

  • お世話になります。

    VS2003でLabelのTextに「あ‐」(全角ハイフン)をセットするとLabelに「あ」と表示され「‐(全角ハイフン)」が表示されなくなってしまいます。

    「‐(全角ハイフン)」のみをTextに設定すると表示できます。

    どうも全角文字と一緒にTextにセットすると、表示されなくなるようです。

    System.Drawing.Graphics.DrawStringで描画した場合も同様の現象が起きます。TextBoxはこのような現象は起きません。

    このような現象について何か知っておりましたら、教えていただけないでしょうか?

     

     

    2006年5月10日 6:30

回答

  • VS2005 TE for Developersの環境で再現しました。フォームにラベルを貼り付けただけで、プロパティは全てデフォルトです。
    どうも全角ハイフンは文字化けするようで嫌われているようですね。
    しかし、言われるように全角と一緒に指定した時だけ消えてしまうようです。半角と一緒とか、全角ハイフン単独ではきちんと表示されますので、全角ハイフンの文字コードが直接わるさをしているような感じじゃありません。
    フィードバック行きかなぁ?
    2006年5月10日 7:47
    モデレータ
  • WindowsXP Professional SP2
    VS.Net 2003 C#.NET VB.NET .Net FrameWork1.1

    上記環境で再現しました。

    フィードバック行きですね。

    2006年5月10日 8:24
  • この件に関するサポート技術情報が出てます。

     

    KB944975: GDI+ で文字列を描画するアプリケーションにて全角ハイフンが表示されない
    最終更新日 : 2007年11月19日
    リビジョン : 1.1

    原因
    GDI+ では、全角文字列中で使用された全角ハイフン文字を特殊な制御文字として認識します。全角ハイフンを含む全角文字列を GDI+ で描画した場合、全角ハイフン文字が表示されません。

     

    状況
    この動作は仕様です。

     

    詳細
    この問題は、GDI+ を内部で使用する .NET Framework System.Drawing 名前空間、Graphics クラスの DrawString メソッドなどにおいても発生する場合があります。.NET Framework 内の名前空間、クラス、メソッドなどが GDI+ を使用しているかどうか確認するには、各名前空間、クラス、メソッドのリファレンスをご参照ください。

     

    この資料は以下の製品について記述したものです。
    • Microsoft GDI+ 1.0
    • Microsoft .NET Framework 1.0
    • Microsoft .NET Framework 1.1
    • Microsoft .NET Framework 2.0
    • Microsoft Visual Studio 2005 Express Edition
    • Microsoft Visual Studio 2005 Professional Edition
    • Microsoft Visual Studio 2005 Standard Edition
    • Microsoft Visual Studio 2005 Team Suite

     

    ちなみに、 Visual Studio 2008 TS beta2 (日本語版) でビルドしたものを Vista (64bit, Aero 有効) で実行してみましたが、 やはり再現しました。
    ※ 試したこと: WinForm 2.0 で、 Label ( UseCompatibleTextRendering プロパティ = true ) の Text に設定した場合と、 PictureBox の Paint イベントで e.Graphics.DrawString(...) を実行した場合。

    2007年11月20日 2:24

すべての返信

  • WinXPSP2,Office2003にて再現しませんでした。

    既定値ではないプロパティを書いてもらえるとよいかも。

    #AutoSize=Falseでその2文字分の幅が無いっていう落ちではないですよね?

    2006年5月10日 7:26
  • VS2005 TE for Developersの環境で再現しました。フォームにラベルを貼り付けただけで、プロパティは全てデフォルトです。
    どうも全角ハイフンは文字化けするようで嫌われているようですね。
    しかし、言われるように全角と一緒に指定した時だけ消えてしまうようです。半角と一緒とか、全角ハイフン単独ではきちんと表示されますので、全角ハイフンの文字コードが直接わるさをしているような感じじゃありません。
    フィードバック行きかなぁ?
    2006年5月10日 7:47
    モデレータ
  • まどかさん、ご返答ありがとうございます。

    すいません。環境を記述していませんでした。

    WindowsXP Professional SP2

    VS.Net 2003  C#.NET VB.NET .Net FrameWork1.1

    >既定値ではないプロパティを書いてもらえるとよいかも。

    Labelのプロパティは、全て規定値のままです。

    #AutoSize=Falseでその2文字分の幅が無いっていう落ちではないですよね?

    そういうことはありません。

    どうですか、再現しませんでしたか?似たような環境ですが、いろいろなマシンで、試しましたが、再現したのですが…

    もしよろしければ、「あ‐」をコピーしてLabelのTextに設定していただけませんか?

     

    2006年5月10日 7:59
  • WindowsXP Professional SP2
    VS.Net 2003 C#.NET VB.NET .Net FrameWork1.1

    上記環境で再現しました。

    フィードバック行きですね。

    2006年5月10日 8:24
  • 同じ環境で再現しました!

    「あ--」とハイフンを2つ入れてみたらどうでしょうか。

    とりあえず目的のことはできると思います。

    2006年5月10日 8:32
  • trapemiyaさん、うなまなさん、ちひはるさん ご回答ありがとうございます。

    そうですか、フィードバック行きですかね。

    今、回避策を探しているのですが、なかなか良い方法が思いつきません。「あ‐‐」も駄目です。全角ハイフンを強制的に変更するなどあるともいますが、影響範囲も結構大きいと思います。入出力関連全般なので…

    今まで、同じような現象で困った方はいないのでしょうか?それとも、あまり全角ハイフン等は、入力させないのでしょうか?

     

    2006年5月10日 8:53
  • 自己フォローです。

    ちょっと勘違いをしていました。

     

    ハイフンをいくつ入れても表示されませんね。。。

    試しに、VB6.0とVS2005でも同じように設定してみましたが、

    どちらとも問題なく表示されました。

    VS2003のバグでしょうか。。。?

    ごめんなさい。余計な投稿でしたね。

    2006年5月10日 8:55
  • あっちゃぁ。

    今やり直したら、再現しました。
    IMEの候補の説明に気付くまで、全角マイナスのほうで試してました。

    2006年5月10日 8:56
  • GDI+ の問題、 らしいですね。 GDI には、 この問題はないとのこと。
     → http://www.atmarkit.co.jp/fdotnet/vblab/appqa_04/appqa_04_01.html

    VB.NET 2003 で確認してみました。
    ※ 入力している文字の "‐" は、 すべて U+2010 (全角ハイフン) です。

    ・ "‐part1‐part2‐" : ちゃんとそのまま表示された。
    ・ "‐part1‐p全art2‐" : 漢字やカナが入ると、 U+2010 は、すべて表示されない。
      → "part1p全art2"
    ・ "‐longlongpart1‐longlongpart2あ‐" : 同じく表示されない。 ただし、 Label の幅が狭くてワードラップが発生したときは、 中央の  U+2010  が表示された。
      → "longlongpart1‐
            longlongpart2あ"
    どうやら、 ワードラップするための仕掛けが、 妙な動きをしてくれているみたいです。

    U+2010 は U+002D (ハイフン - マイナス) と同じ と言いながら、 挙動が違うのはいやな感じですね。

    2006年9月22日 5:54
  • この件に関するサポート技術情報が出てます。

     

    KB944975: GDI+ で文字列を描画するアプリケーションにて全角ハイフンが表示されない
    最終更新日 : 2007年11月19日
    リビジョン : 1.1

    原因
    GDI+ では、全角文字列中で使用された全角ハイフン文字を特殊な制御文字として認識します。全角ハイフンを含む全角文字列を GDI+ で描画した場合、全角ハイフン文字が表示されません。

     

    状況
    この動作は仕様です。

     

    詳細
    この問題は、GDI+ を内部で使用する .NET Framework System.Drawing 名前空間、Graphics クラスの DrawString メソッドなどにおいても発生する場合があります。.NET Framework 内の名前空間、クラス、メソッドなどが GDI+ を使用しているかどうか確認するには、各名前空間、クラス、メソッドのリファレンスをご参照ください。

     

    この資料は以下の製品について記述したものです。
    • Microsoft GDI+ 1.0
    • Microsoft .NET Framework 1.0
    • Microsoft .NET Framework 1.1
    • Microsoft .NET Framework 2.0
    • Microsoft Visual Studio 2005 Express Edition
    • Microsoft Visual Studio 2005 Professional Edition
    • Microsoft Visual Studio 2005 Standard Edition
    • Microsoft Visual Studio 2005 Team Suite

     

    ちなみに、 Visual Studio 2008 TS beta2 (日本語版) でビルドしたものを Vista (64bit, Aero 有効) で実行してみましたが、 やはり再現しました。
    ※ 試したこと: WinForm 2.0 で、 Label ( UseCompatibleTextRendering プロパティ = true ) の Text に設定した場合と、 PictureBox の Paint イベントで e.Graphics.DrawString(...) を実行した場合。

    2007年11月20日 2:24
  •  biac さんからの引用

    GDI+ の問題、 らしいですね。 GDI には、 この問題はないとのこと。
     → http://www.atmarkit.co.jp/fdotnet/vblab/appqa_04/appqa_04_01.html

     

    補足です。

    上のリンク先をちゃんと読めば書いてあるんですが、 .NET Framework 2.0 以降では、 デフォルトでは Label コントロールにこの現象は出ないはずです。

    .NET Framework 2.0 以降では、 Label コントロールの UseCompatibleTextRendering プロパティを True にしてやると、 .NET Framework 1.1 までと同様に 「Labelに全角ハイフンが表示できない」 という現象が発生します。

     

    ※ で、 デフォルトで False になってるはずですが、 なぜか True になっちゃうこともあるようで…

    2007年11月21日 8:51
  •  biac さんからの引用

    GDI+ では、全角文字列中で使用された全角ハイフン文字を特殊な制御文字として認識します。全角ハイフンを含む全角文字列を GDI+ で描画した場合、全角ハイフン文字が表示されません。

     

    文字コードを真面目に考えたい人向けの、 補足。

     

    この KB944975 の表現は、 UNICODE をちゃんと知っている人に対しては通りませんので、 ご注意ください。

    U+2010 は、 Unicode org の文書でも、 MSHQ の文書でも、 Windows の文字コード表でも、 ただの "Hyphen" (ハイフン) です。

    U+FF0D が "Fullwidth Hyphen-Minus" (全幅のハイフン/マイナス) と呼ばれます。 「全角ハイフン」 と言われたら、 UNICODE をちゃんと勉強した人は、  "Fullwidth Hyphen-Minus" を省略して言ってるんだな、 と思うはずです。 ( たぶん )

    ※ U+2010 を 「全角ハイフン」 と呼ぶのは、 IME の変換候補の説明に出てきます。

     

    それと。 GDI+ に渡す文字列に 「全角文字」 が入っているときだけこの現象が起きる、 とは限りません。

    「半角カナ」 でも発生するようです。

    どういう文字を入れたら発生するのか、 その厳密な範囲は、 私にはわかりません。

    # なので 「漢字やカナが入ると」 というボカした表現をしました。

    ※ 参考: KB944975 に出てきた呼び方と、 本来の呼称。

      KB944975 での呼称
    (≒ IME 変換候補の説明)
    Unicode での呼称
    (文字コード表での名前)
    "‐" U+2010 全角ハイフン "Hyphen"
    "-" U+002D 半角ハイフン、半角マイナス "Hyphen - minus"
    "-" U+FF0D 全角マイナス "Fullwidth Hyphen-Minus"
    "―" U+2015 全角ダッシュ "Horizontal Bar"
    "ー" U+30FC 全角長音 "Katakana-Hiragana Prolonged Sound Mark"
    2007年11月21日 9:07
  • こんにちは。中川俊輔 です。

     

    trapemiyaさん、まどかさん、うなまなさん、ちひはるさん、再現テストをしていただき、

    ありがとうございます。

     

    biacさん、技術情報の調査、および補足説明をしていただきありがとうございます。

     

    ti56さんへ

    問題は解決しましたでしょうか?

    trapemiyaさん、うなまなさん、biacさんの回答へ

    回答済みチェックをつけさせていただきました。

     

    「回答済み」チェックがつかないままだとフォーラム内の検索機能ではこの投稿は検索対象にならず、
    同じ問題で困っている方が見つけることができなくなり、非常にもったいないです。

     

    ti56さんはチェックを解除することもできますので、ご確認ください。

     

    それでは!

    2007年12月27日 7:41