Visual Studio デベロッパー センター > Visual Studio フォーラム > Visual Studio International Pack > WinForm で読み仮名を取得できる YomiganaTextBox コントロール (beta版) の仕様・不具合
質問する質問する
 

全般的な情報交換WinForm で読み仮名を取得できる YomiganaTextBox コントロール (beta版) の仕様・不具合

  • 2009年6月22日 1:53biac ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    YomiganaTextBox コントロールを軽くさわってみました。 Windows 7 RC に Visual C# 2008 Express Edition SP1 です。

    参照設定をしたところで、 いきなりガックシです。
    * 名前空間が YomiganaWinFrom Controls になっています。 ( スペルミス )

    本コントロールとラベルを Form に貼り付け、TextChanged ハンドラを追加。

    private void yomiganaTextBox1_TextChanged(object sender, EventArgs e) {
      this.label1.Text = ((YomiganaTextBox )sender).Yomigana ;
    }

    これで、 とりあえず実行してみたところ…
    * コントロール内部の OnLostFocus イベントハンドラで NullReferenceException 例外が発生
    ※ Win7RC だから、 でしょうか?

    System.NullReferenceException はハンドルされませんでした。
      Message="オブジェクト参照がオブジェクト インスタンスに設定されていません。"
      Source="YomiganaTextBox"
      StackTrace:
           場所 Microsoft.International.YomiganaWinFromControls.YomiganaTextBox.OnLostFocus(EventArgs e)
           場所 System.Windows.Forms.Control.WmKillFocus(Message& m)
           場所 System.Windows.Forms.Control.WndProc(Message& m)
           場所 System.Windows.Forms.TextBoxBase.WndProc(Message& m)
           場所 System.Windows.Forms.TextBox.WndProc(Message& m)
           場所 Microsoft.International.YomiganaWinFromControls.YomiganaTextBox.WndProc(Message& m)
           場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           場所 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           場所 System.Windows.Forms.UnsafeNativeMethods.PeekMessage(MSG& msg, HandleRef hwnd, Int32 msgMin, Int32 msgMax, Int32 remove)
           場所 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
           場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           場所 System.Windows.Forms.Application.Run(Form mainForm)
           場所 YomiganaWinFormTextBox.Program.Main() 場所 D:\Users\biac\Documents\Visual Studio 2008\Projects\YomiganaTextBox\YomiganaWinFormTextBox\Program.cs:行 15
           場所 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           場所 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           場所 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           場所 System.Threading.ThreadHelper.ThreadStart()
      InnerException:

    これを回避するために、 コントロールを継承したクラスを作り、 OnLostFocus() メソッドをオーバライドして、 そこで例外を潰しちゃって、 動くようにしてみました。
    ようやく動いたので、 YomiganaKanaKind をカタカナに変えてみます…
    * デザイン画面での YomiganaKanaKind の設定が反映されません。

    InitializeComponent() 後に、 自前コードで YomiganaKanaKind を指定してやれば、 ちゃんとひらがなで取得できました。

    実際の動きは、 WPF のものとおおむね同じですね。
    ※ 以下は、 私の blog 記事 のほうには画面も載せてあります。

    1. 入力した文字を BS や DEL で削除しても、 ふりがなは元のまま。 ( WPF 版と同じ )
    2. 「東京都西新宿」 と入力してから、 途中に 「新宿区」 を入力。 文字列の途中に挿入しても、 すべて末尾への追加になってしまいます。 ( WPF 版と同じ )
    3. WPF 版では問題があった 「一の宮」 や 「市ヶ谷」 は、 大丈夫そうでした。
    4. WPF 版では問題があった変換確定操作無しでの次入力も、 大丈夫そうでした。
    5. IME オンになっているときしか、 読み仮名として出てきません。 IME オフのときは、 入力をそのまま読み仮名として使ってほしいです。 ( WPF 版と同じ )
    それと、 音引きが半角になってしまいました。
    6. WPF 版では問題があった読み仮名にスペースが入らない問題。 一度に変換する文字列の中に含まれている空白は、 フリガナにも出てきます。 単独でスペースを入力したときはダメでした。
    7. 「ヴ」 や 「ヵ」 の読み仮名も、 ひらがなで出てきます。 素晴らしい! けど、 このことを知らずに、 Unicode じゃない DB に格納してたりするとハマりますね。
    biac [ http://bluewatersoft.cocolog-nifty.com/ ]

すべての返信

  • WPFのコントロールに引き続き、ご評価のほど、ありがとうございます。

    YomiganaTextBox コントロールを軽くさわってみました。 Windows 7 RC に Visual C# 2008 Express Edition SP1 です。

    参照設定をしたところで、 いきなりガックシです。
    * 名前空間が YomiganaWinFrom Controls になっています。 ( スペルミス )


    これは大変失礼をいたしました。ご指摘いただきまして、ありがとうございます。修正も兼ねて、名前空間は、Microsoft.International.Windows.Forms に変更し、コントロール名も YomiganaTextBox にしようと考えています。
    本コントロールとラベルを Form に貼り付け、TextChanged ハンドラを追加。

    private void yomiganaTextBox1_TextChanged(object sender, EventArgs e) {
      this.label1.Text = ((YomiganaTextBox )sender).Yomigana ;
    }

    これで、 とりあえず実行してみたところ…
    * コントロール内部の OnLostFocus イベントハンドラで NullReferenceException 例外が発生
    ※ Win7RC だから、 でしょうか?

    ご協力ありがとうございます。不具合のご報告は、最終版での品質を確保するためには大変助かります。サポート対象となっているプラットフォームで再現をしてみて、バグとして登録をいたします。

    それと、 音引きが半角になってしまいました。

    これは動作として不都合が生じますから、修正を検討させていただきます。
     
    7. 「ヴ」 や 「ヵ」 の読み仮名も、 ひらがなで出てきます。 素晴らしい! けど、 このことを知らずに、 Unicode じゃない DB に格納してたりするとハマりますね。
    こちらは、私どもとしては悩ましいところですが、このままの仕様でいきたいと考えております。

    この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。詳しくは http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。