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

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

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

Re[2]: DataGridView・セル編集時の矢印キー


(過去ログ 20 を表示中)

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

■8345 / inTopicNo.1)  DataGridView・セル編集時の矢印キー制御方法
  
□投稿者/ アリパパ (5回)-(2007/09/28(Fri) 09:15:27)

分類:[C#] 

皆様、お世話になります。

開発環境:VS2005 C# WinXP Pro

早速ですが、質問があります。
DataGridViewの編集時は、テキストBOXが出現し、このコントロールにて
編集を行いますが、例えばセルに「123」というデータが存在し、キャレ
ットが1の左、又は3の右に表示されている際に、矢印キーを押下すると、
カレントセルが左右のセルに移ってしまいます。この動作を制御したいの
ですが、何か関連情報や方法をご存知の方がいらっしゃいましたら、ご教
授頂けます様、お願いします。

セルが編集状態になった際に、DataGridViewのテキストBOXを取得し、Key
Pressイベントを宣言して、矢印キー押下の取得を考えましたが、矢印キー
の場合、KeyPressイベントが発生しない為、対応出来ませんでした。
引用返信 編集キー/
■8348 / inTopicNo.2)  Re[1]: DataGridView・セル編集時の矢印キー
□投稿者/ @echo (10回)-(2007/09/28(Fri) 10:36:06)
2007/09/28(Fri) 11:42:49 編集(投稿者)

No8345 (アリパパ さん) に返信
> カレントセルが左右のセルに移ってしまいます。この動作を制御したいの
> ですが、何か関連情報や方法をご存知の方がいらっしゃいましたら、ご教
> 授頂けます様、お願いします。

キー入力自体は、

その1: Form の ProcessCmdKey で処理する。
その2: Form の KeyPreview を true にして Form の KeyDown/Up イベントで処理する。

どちらでも可能だと思います。

ただし、矢印キーによる編集終了時は KeyDown は発生せず、
KeyUp のみ発生するようなので、ProcessCmdKey で
処理することになると思います。

P.S. こちらの方法でもできるようです。
http://dobon.net/vb/dotnet/datagridview/textboxevent.html

キャレット位置を取得する方法が分からなかったので
少し調べてみると、dataGridView1.EditingControl で
取得できるようですね。

引用返信 編集キー/
■8394 / inTopicNo.3)  Re[2]: DataGridView・セル編集時の矢印キー
□投稿者/ y4yama (30回)-(2007/09/28(Fri) 16:11:47)
No8348 (@echo さん) に返信
> ただし、矢印キーによる編集終了時は KeyDown は発生せず、
> KeyUp のみ発生するようなので、ProcessCmdKey で
> 処理することになると思います。

勉強中の者です。@echo さんの方法でトライしてみました
DataGridView1_CellValidating()のタイミングで(e.Cancel = Trueとすると、KeyUp も発生しないですが)
うまくフラグ判断したら、キャレット位置は全く知る必要なく、実現できた感じです
(ありがとうございました)
引用返信 編集キー/
■8410 / inTopicNo.4)  Re[2]: DataGridView・セル編集時の矢印キー
□投稿者/ アリパパ (7回)-(2007/09/28(Fri) 18:45:13)
@echo様、お世話になっております。

下記アドバイス、有難うございました。

> キー入力自体は、
>
> その1: Form の ProcessCmdKey で処理する。
> その2: Form の KeyPreview を true にして Form の KeyDown/Up イベントで処理する。
>
> どちらでも可能だと思います。

FormのProcessCmdKeyをオーバーライドして、矢印キーの押下を取得出来ました。
DataGridViewのTextBoxCellは、dataGridView1のEditingControlShowingで取得
しておき、矢印キーが押下された際に、TextBoxCell内のキャレット位置により、
キー操作を無効化する事で、セルの移動を制御する事が出来ました。

ご教授感謝致します。今後とも宜しくお願い致します。

PS:y4yama様、ご協力有難うございました。


解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -