none
DataGridViewのIMEモード変更 RRS feed

  • 質問

  • VB2005でWindowsアプリケーションを作成しています。
    フォーム上にDataGridViewを置き、いくつかの列(商品コード、商品単価、備考など)を追加しました。
    通常のTextBoxならばプロパティにIMEモードが指定できて、カーソルが来たときに自動的にIMEのOnやOffができるのですが
    DataGridViewのColumnsコレクション内にそれらを指定する項目が見つかりません。
    どのようにすると、IMEモードを切り替えることができるのでしょうか。

     

    DataGridView自体にはIMEモードが指定できるので、CellEnterイベントでCurrentCell.OwningColumn.Nameによって
    Me.ImeMode = Windows.Forms.ImeMode.Hiraganaなんて事は可能だと思いますが、、
    それ以外には指定方法がないでしょうか。

     

    よろしくお願いします。

    2007年12月4日 2:30

回答

すべての返信

  • Edit時に表示されるのはEditingControlのTextBoxですから、これに対してIMEをセットしてあげれば良いでしょう。

    C#ですが良いサンプルがありました。

     

    DataGridView のColumn ごとに IME モードをセットする
    http://momotchi.net/forums/p/1017/1293.aspx#1293

    2007年12月4日 3:01
    モデレータ
  • trapemiyaさん。返信ありがとうございます。

    EditingControlでもうまくいきましたが、これもHeaderText == "Column1"のように、そのときの

    Cell位置によってimeモードを変更させているようです。

    まずは、この方法でも解決はできましたので進めてみようと思います。

    もっとシンプルに、デザイン画面上のプロパティなどで設定するというのは無いのでしょうか。。

     

    2007年12月4日 5:10
  • 以下のような感じで独自のDataGridViewのカラムを作成します。DataGridViewTextBoxEditingControlがテキストボックスに相当しますので、こいつのImeModeを設定するようなプロパティを設けてしまうことも考えられます。
    以下のmyDataGridViewTextBoxColumnはデザイン画面からColumnTypeとして選択できますが、それ以上のものはないので、デザイナからではImeModeの設定は難しそうですね。たぶん・・・

     

    // Column
    public class myDataGridViewTextBoxColumn : DataGridViewTextBoxColumn
    {
     public myDataGridViewTextBoxColumn()
     {
      base.CellTemplate = new myDataGridViewTextBoxCell();
     }
    }

     

    // Cell
    public class myDataGridViewTextBoxCell : DataGridViewTextBoxCell
    {
     public override Type EditType
     {
      get
      {
       return typeof(myDataGridViewTextBoxEditingControl);
      }
     }
    }

     

    // EditingControl
    public class myDataGridViewTextBoxEditingControl : DataGridViewTextBoxEditingControl
    {

    }

    2007年12月4日 8:42
    モデレータ