none
DataGridViewのIME入力で全角スペースが2個入ってしまう RRS feed

  • 質問

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

    ざっとした現象としてはこんな感じです。
    (デザイナ)
    1.Form上にDataGridViewを配置
    2.DataGridViewのIMEModeをHiraganaにセット
    3.DataGridViewにDataGridViewTextBoxColumnを配置

    上記のFormをビルド後、DataGridView上でスペースキーを入力すると、セルには全角スペースが2個入っています。
    この余分な全角スペースが入らないようにしたいのです。

    以前、どこかでPreviewKeyDownでKeyValueがConsoleKey.ProcessのときにBeginEditすればいいという記事があったのですが、
    それだと普通にローマ字入力した時に最初のキー入力がキャンセルされてるっぽいです。
    (例. Kanji → あんじ)

    以上、どうかよろしくお願いします。

    2021年2月6日 21:29

回答

  • 再現しないなぁと思っていたら2004以降の新IMEだとなるのか

    class DGV : DataGridView
    {
        protected override void WndProc(ref Message m)
        {
            const int WM_KEYDOWN = 0x100;
            if (m.Msg == WM_KEYDOWN)
            {
                if (m.WParam == new IntPtr((int)Keys.ProcessKey))
                {
                    if (!this.CurrentCell.IsInEditMode)
                    {
                        this.BeginEdit(true);
                    }
                }
            }
            base.WndProc(ref m);
        }
    }
    #キーカスタマイズできないから旧IME使ってる

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク ボテ猫 2021年2月8日 5:26
    2021年2月7日 15:14

すべての返信

  • OSの種類とFrameworkのバージョンを書かれていませんが、「Fall Creators Update を適用後 DataGridView に文字を入力すると 2 文字入力される」の回避策(2)はどうでしょう?


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 編集済み gekkaMVP 2021年2月6日 22:44
    2021年2月6日 22:41
  • すいません、駄目でした。
    (検証はVisualBasicで行ないましたが多分同様だと思います)

    ちなみにOSはWin10のPro、Frameworkは4.8です。

    提示いただいた回避策はAとかIなどのローマ字の先頭文字でしたが、
    そちらは特に問題はなく、問題があるのはIMEの変換がONかつスペースキーを押したときで、
    現象もそちらとは違っているようでした。

    情報提供ありがとうございました。またなにかあればよろしくお願いします。

    2021年2月7日 0:58
  • 再現しないなぁと思っていたら2004以降の新IMEだとなるのか

    class DGV : DataGridView
    {
        protected override void WndProc(ref Message m)
        {
            const int WM_KEYDOWN = 0x100;
            if (m.Msg == WM_KEYDOWN)
            {
                if (m.WParam == new IntPtr((int)Keys.ProcessKey))
                {
                    if (!this.CurrentCell.IsInEditMode)
                    {
                        this.BeginEdit(true);
                    }
                }
            }
            base.WndProc(ref m);
        }
    }
    #キーカスタマイズできないから旧IME使ってる

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク ボテ猫 2021年2月8日 5:26
    2021年2月7日 15:14
  • OS:Win10 Pro 2004
    Framework:4.8

    上記の提案を試してみましたがダメでした。
    AとかIとかは特に問題なく、スペースキーの時のみなんです。

    もし、他にも何かありましたらよろしくお願いします。

    2021年2月8日 0:47
  • ありがとうございます。
    うまくいきました。

    これってIMEのバグ?

    これからもどうぞよろしくお願いします。
    2021年2月8日 5:31