The road to C# master trapemiya

C#を中心に、.NETの話題を取り上げます。

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  256  : 記事  1  : コメント  1310  : トラックバック  30

ニュース

Since 2005年10月26日

わんくま同盟

わんくま同盟

Microsoft MVP


Visual Developer - Visual C#

記事カテゴリ

書庫

日記カテゴリ

DataGridViewのセル移動方法
http://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=37120
の関係で調べていたのですが、 少しまとめてみます。

1.編集モード(セルに値を入力中)時に、KeyDownイベントでEnterキーを拾って処理しようと試したが、拾えず。orz 考えてみれば実際にはセルといってもTextBoxに対しての入力のようである。
2.そこで、EditingControlShowingイベントでEdit時に表示されるTextBoxのKeyDownイベントハンドラを登録するも、やはりEnterキーだけ拾えず。orz

結局、今のところは、DataGridViewを継承したクラスで、ProcessDialogKeyを処理することにより、逃げています。

class myDataGridView : System.Windows.Forms.DataGridView
{
    protected override bool ProcessDialogKey(Keys keyData)
    {
        if (keyData == Keys.Enter)
        {
            if (this.CurrentCell.ColumnIndex != this.ColumnCount - 1)
            {
                this.CurrentCell = this[this.CurrentCell.ColumnIndex + 1,
                                    this.CurrentCell.RowIndex];
                
                return true;
            }
            else
            {
                if (this.CurrentCell.RowIndex != this.RowCount - 1)
                    this.CurrentCell = this[0, this.CurrentCell.RowIndex];
            
                return false;
            }
        }
        return false;
    }
}
投稿日時 : 2005年10月31日 17:38

コメント

# re: [C#] DataGridViewにおいてEnterキーで右隣のセルへキャレットを飛ばす 2005/11/01 0:06 えムナウ
Enterキーを拾うには1.1のころからIsInputKeyをオーバーライドが基本ですよね。
class myDataGridView : System.Windows.Forms.DataGridView
{
protected override bool IsInputKey(System.Windows.Forms.Keys keyData)
{
if (keyData == System.Windows.Forms.Keys.Enter) return true;
return base.IsInputKey(keyData);
}
}


# re: [C#] DataGridViewにおいてEnterキーで右隣のセルへキャレットを飛ばす 2005/11/01 0:10 えムナウ
GDNJに書いておきます。


# re: [C#] DataGridViewにおいてEnterキーで右隣のセルへキャレットを飛ばす 2005/11/01 12:20 trapemiya
ありがとうございます。IsInputKeyは試していませんでした。早速試してみたのですが、やはりKeyDownのイベントを拾うことができませんでした。
私の書き方が悪かったのですが、GridViewでセルの編集モードに入った時は、実際にはTextBoxに対して値を入力しているようなのです。なので、このTextBoxのIsInputKeyをオーバーライドすればEnterキーも拾えるかもしれませんが、その方法がわかりません。(^^;

試したところ、GridViewにおいて、
1.編集モード・・・IsInputKeyは実行されない。ProcessDialogKeyは実行される。
2.編集モードじゃない・・・IsInputKeyは実行される。ProcessDialogKeyは実行されない。
3.編集モードじゃない時にセルに何か値を入力した時・・・IsInputKey、ProcessDialogKeyともに実行される。

といった、感じでした。

# re: [C#] DataGridViewにおいてEnterキーで右隣のセルへキャレットを飛ばす 2005/11/01 12:30 trapemiya
少し本文を詳しく修正しました。

Post Feedback

タイトル
名前
Url:
コメント