C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

DataGridViewのセルをEnterキーで横移動したい


(過去ログ 9 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■9053 / inTopicNo.1)  DataGridViewのセルをEnterキーで横移動したい
  
□投稿者/ まー 二等兵(1回)-(2006/12/12(Tue) 19:29:24)

分類:[C#] 


分類:[C#] 

初めて投稿させていただきます。

http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-37120.htm
上記のページを参考に、DataGridViewでEnterキーでセルの横移動を
したかったのですが、

・新規行で横移動しないこと、
・EditModeがEditOnKeystrokeOrF2とEditOnKeystrokeの時は横移動するが、
 EditOnEnterときは横移動したあと下の列に移動してしまうこと

この2点が解決できません。

とりあえず各関数の最初と最後でテキスト出力してみたところ、

新規行でEnterキーを押した場合は、
EditModeがEditOnKeystrokeOrF2、EditOnEnterの時ともに
TextBoxCellのEditTypeを一回だけ参照して終わってしまい、
TextBoxEditのOnPreviewKeyDown、EditingControlWantsInputKeyも、
TextBoxCellのOnKeyDownも通りませんでした。

既存の行でEnterキーを押した場合
EditModeがEditOnKeystrokeOrF2の場合
TextBoxCellのEditTypeを開始 列番号:0
TextBoxCellのEditTypeを開始 列番号:0
TextBoxCellのEditTypeを開始 列番号:0
TextBoxEditのOnPreviewKeyDownを開始 列番号:0 入力されたキー:Return
TextBoxCellのEditTypeを開始 列番号:0
TextBoxEditのOnPreviewKeyDownを終了 列番号:0 入力されたキー:Return

EditModeがEditOnEnterの場合
TextBoxCellのEditTypeを開始 列番号:0
TextBoxCellのEditTypeを開始 列番号:0
TextBoxEditのOnPreviewKeyDownを開始 列番号:0 入力されたキー:Return
TextBoxCellのEditTypeを開始 列番号:0
TextBoxEditのOnPreviewKeyDownを終了 列番号:0 入力されたキー:Return
TextBoxCellのEditTypeを開始 列番号:1

EditModeがEditOnEnterの場合、最初のEditTypeの参照が一回少なく、
最後にEditTypeが参照されていて、ここで列番号が増えていることまでは
わかりました。
ステップで確認すると、確かにEditTypeに入ったときに列番号が増えます。
最後にEditTypeが参照されているのは、フォーカスが移るとすぐに
編集モードになるせいかと思ったのですが、列番号がどこで増えているのか
わかりません…。
なにかを間違えているのだと思うのですが、どう考えていけばいいのか、
行き詰まってしまいました。

アドバイスを頂ければ幸いです。




0
引用返信 編集キー/
■9148 / inTopicNo.2)  Re[1]: DataGridViewのセルをEnterキーで横移動したい
□投稿者/ あきひろ 一等兵(20回)-(2006/12/13(Wed) 20:14:38)

分類:[C#] 

何がしたいのかよく見えてないので外しているかもしれませんが、
overrideしたOnPreviewKeyDown中の、ColumnIndexをインクリメントする
直前で、その行が最下行かどうかの判断をするのじゃだめでしょうか?

grid.CurrentCell = grid[grid.CurrentCell.ColumnIndex + 1, grid.CurrentCell.RowIndex];
return;

となってるところを、

if (grid.CurrentCell.RowIndex != grid.RowCount - 1)
{
grid.CurrentCell = grid[grid.CurrentCell.ColumnIndex + 1,grid.CurrentCell.RowIndex];
return;
}
みたいな。


0
引用返信 編集キー/
■9172 / inTopicNo.3)  Re[2]: DataGridViewのセルをEnterキーで横移動したい
□投稿者/ まー 二等兵(8回)-(2006/12/14(Thu) 11:16:36)

分類:[C#] 

No9148に返信(あきひろさんの記事)お返事ありがとうございます。
説明不足でした。すいません。

やりたいことは、
+---+-------+-------+-------+
| | A | C | D |
+---+-------+-------+-------+
| | A1 | C1 | D1 |
+---+-------+-------+-------+
| | A2 | C2 | D2 |
+---+-------+-------+-------+
| * | A3 | C3 | D3 |
+---+-------+-------+-------+


このような列Bが非表示になった表をDataGridViewで表示していて、
カーソルは最初は[A1]の場所にあります。
何もしなければ、カーソルは

A1→何か入力(Enter)→A2→何か入力(Enter)→A3→…

の順に移動すると思うのですが、それを、

A1→何か入力(Enter)→C1→何か入力(Enter)→D1→何か入力(Enter)→A2…D3→何か入力(Enter)→次の新規行の左端…

の順に移動するようにしたいのです

検索して、上記のページを発見したので、
そのコードを参照させてもらたのですが、

DataGridのEidtModeがEditOnKeystrokeOrF2のときは

A1→(Enter)→C1→(Enter)→D1→(Enter)→A2…

のように移動したのですが、EditModeをEditOnEnterに変えたところ、

A1→(Enter)→C1→C2→(Enter)→D2→A3→…

のように、一瞬真横に移動した後すぐにカーソルが
その次のEnterで移動して欲しいセルに移動してしまいます。

また、どちらのEditModeでも*の行に入力した後Enterキーを押すと、
その行の編集が終了し、カーソルは下に追加された新規行に移動してしまいます。

| | | | |
+-----------+-------+-------+-------+
|(編集中)  |test| | | |
+-----------+-------+-------+-------+
| * | | | |
+-----------+-------+-------+-------+

この状態でEnterキーを押すと、testと入力したセルの右横にカーソルが移動して欲しいのに、
カーソルは下の*だった行に移動してしまいます。

| | | | |
+-----------+-------+-------+-------+
|      |test | | |
+-----------+-------+-------+-------+
|(編集中)  | | | | |
+-----------+-------+-------+-------+
| * | | | |
+-----------+-------+-------+-------+

一応、コードを添付します。
下手な質問につきあってもらって、ありがとうございます。



0
引用返信 編集キー/
■9174 / inTopicNo.4)  Re[3]: DataGridViewのセルをEnterキーで横移動したい
□投稿者/ まー 二等兵(9回)-(2006/12/14(Thu) 11:22:12)

分類:[C#] 

No9172に返信
すいません、図表モードにするのを忘れていました。
編集もできませんので(ERROR-親記事は編集不可!! とでてしまいます。)
投稿し直します。

お返事ありがとうございます。
説明不足でした。すいません。

やりたいことは、
+---+-------+-------+-------+
| | A | C | D |
+---+-------+-------+-------+
| | A1 | C1 | D1 |
+---+-------+-------+-------+
| | A2 | C2 | D2 |
+---+-------+-------+-------+
| * | A3 | C3 | D3 |
+---+-------+-------+-------+


このような列Bが非表示になった表をDataGridViewで表示していて、
カーソルは最初は[A1]の場所にあります。
何もしなければ、カーソルは

A1→何か入力(Enter)→A2→何か入力(Enter)→A3→…

の順に移動すると思うのですが、それを、

A1→何か入力(Enter)→C1→何か入力(Enter)→D1→何か入力(Enter)→A2…D3→何か入力(Enter)→次の新規行の左端…

の順に移動するようにしたいのです

検索して、上記のページを発見したので、
そのコードを参照させてもらたのですが、

DataGridのEidtModeがEditOnKeystrokeOrF2のときは

A1→(Enter)→C1→(Enter)→D1→(Enter)→A2…

のように移動したのですが、EditModeをEditOnEnterに変えたところ、

A1→(Enter)→C1→C2→(Enter)→D2→A3→…

のように、一瞬真横に移動した後すぐにカーソルが
その次のEnterで移動して欲しいセルに移動してしまいます。

また、どちらのEditModeでも*の行に入力した後Enterキーを押すと、
その行の編集が終了し、カーソルは下に追加された新規行に移動してしまいます。

| | | | |
+-----------+-------+-------+-------+
|(編集中)  |test| | | |
+-----------+-------+-------+-------+
| * | | | |
+-----------+-------+-------+-------+

この状態でEnterキーを押すと、testと入力したセルの右横にカーソルが移動して欲しいのに、
カーソルは下の*だった行に移動してしまいます。

| | | | |
+-----------+-------+-------+-------+
|      |test | | |
+-----------+-------+-------+-------+
|(編集中)  | | | | |
+-----------+-------+-------+-------+
| * | | | |
+-----------+-------+-------+-------+

一応、コードを添付します。
下手な質問につきあってもらって、ありがとうございます。



0
引用返信 編集キー/
■9191 / inTopicNo.5)  Re[4]: DataGridViewのセルをEnterキーで横移動したい
□投稿者/ エツ 二等兵(1回)-(2006/12/14(Thu) 21:31:16)

分類:[C#] 

No9174に返信(まーさんの記事)

こんにちは。
私の大好きなApplication.Idleを使うのはどうですか?

private void dataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
{
Application.Idle += new EventHandler(Application_Idle);
}

private void Application_Idle(object sender, EventArgs e)
{
Application.Idle -= new EventHandler(Application_Idle);
int r = dataGridView1.CurrentCell.RowIndex;
int c = dataGridView1.CurrentCell.ColumnIndex;
dataGridView1.CurrentCell = dataGridView1.Rows[r-1].Cells[c+1];
}

宜しければ試してください。



0
引用返信 編集キー/
■9194 / inTopicNo.6)  Re[5]: DataGridViewのセルをEnterキーで横移動したい
□投稿者/ エツ 二等兵(2回)-(2006/12/14(Thu) 21:53:07)

分類:[C#] 

No9191に返信(エツさんの記事)

文字を入力しないで Enter を押した時の為に次もひつようです。

private void dataGridView1_KeyPress(object sender, KeyPressEventArgs e)
{
Application.Idle += new EventHandler(Application_Idle);
}



0
引用返信 編集キー/
■9203 / inTopicNo.7)  Re[4]: DataGridViewのセルをEnterキーで横移動したい
□投稿者/ あきひろ 一等兵(21回)-(2006/12/15(Fri) 10:29:43)

分類:[C#] 

コードを見ましたが、確かにコレだと右下に行きますね。

元記事のサンプルを見ていただければ分かると思いますが、
右に行くだけにしたくて、OnPreviewKeyDownをoverrideして実装した場合、
base.OnPreviewKeyDown(e)を呼ばないようにする所が肝です。
これを呼ぶと、既定の動作(下移動)をしてしまいます。
ですので、サンプルではEnterキー以外の時は呼び出し、
Enterキーの時には呼び出さないようにしてます(最終カラムの時、
どういう動作をするか読み取ってみると、いろいろ分かると思います)。

まーさんのコードですと、「エンターキーで横移動」メソッドから戻ってきたあとに全てのケースで、base.OnPreviewKeyDownを呼んでいますので、右へ移動した後に、下に移動することになります。
ですので、base.OnPreviewKeyDownを「エンターキーで横移動」メソッドの中の
適切な位置に書くとよろしいのではないかと思います。



0
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -