我三流

いろいろ自分なりにやってみたことを書いています

DataGridViewで列によりIMEモードを変える

DataGridViewで列(カラム)により、IME制御を変更したいってニーズは多いと思う。
以下、ColumnIndexにより、IMEモードを変更する例

例として
Form1上に、dataGridView1があると仮定する。

Form1_Loadイベントで、DataGridViewのCellEnterイベント設定を仕込んでおく。

        // フォームロードイベント
        private void FormUser_Load(object sender, EventArgs e)
        {
            // データグリッドビューのイベントハンドラ設定
            DataGridViewEvent();
        }
        private void DataGridViewEvent()
        {
            // 現在のセルが変更された場合に発生
            dataGridView1.CellEnter += new DataGridViewCellEventHandler(dataGridView_CellEnter);
        }
        // DataGridViewのセル入力フォーカス時イベント
        private void dataGridView1_CellEnter(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
        {

            switch (e.ColumnIndex)
            {
                case 0:
                case 5:
                case 7:
                case 9:
                case 10:
                    //この列はIME無効(半角英数のみ)
                    dataGridView1.ImeMode = System.Windows.Forms.ImeMode.Disable;
                    break;
                case 1:
                case 2:
                case 8:
                //この列は日本語入力ON(ひらがな)
                    dataGridView1.ImeMode = System.Windows.Forms.ImeMode.Hiragana;
                    break;
                case 3:
                case 4:
                    //この列は日本語入力ON(半角カタカナ)
                    dataGridView1.ImeMode = System.Windows.Forms.ImeMode.KatakanaHalf;
                    break;
            }
        }

VBAのSELECT CASEに慣れてたからこれはすんなりとできた。