- PR -

DataGridViewのカレントセルの移動について

1
投稿者投稿内容
yumi
常連さん
会議室デビュー日: 2006/09/28
投稿数: 33
投稿日時: 2007-02-23 15:19
こんにちは。
初歩的な質問ですいません。
DataGridViewでセルの値を編集し、Enterを押すと次の行に移動しますが、
これを自動的に移動させるのではなく、指定したセルに移動させたいと思っています。
例えば、1列目の編集を終えた時は、2列目に、
2列目の編集を終えた時は、1行追加して、その行の1列目に移動させたいと思っています。
セルのCellEndEditイベントで、
Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit

Dim intColumn As Integer = Me.DataGridView1.CurrentCell.ColumnIndex
Dim intRow As Integer = Me.DataGridView1.CurrentCell.RowIndex

Select Case intColumn
Case 0
Me.DataGridView1.CurrentCell = Me.DataGridView1(intColumn + 1, intRow)
Case 1
m_table.Rows.Add()
Me.DataGridView1.Refresh()
Me.DataGridView1.CurrentCell = Me.DataGridView1(0, intRow + 1)
End Select

End Sub
のようにしているのですが、
1列目の編集が終わると次の行の2列目にカーソルが行ってしまいます。
おそらくその後のイベントで行が移動してしまうのではないかと思うのですが、
どのようにすればよいのでしょうか。
よろしくお願いします。
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-02-23 17:28
「1列目の編集が終わると」とありますが、編集を終わらせるときに
Enterキーを使っていませんか?
そもそもDataGridViewはEnterキーで編集を確定すると1つ下のセルに移動しますよね。
ですからCellEndEditイベント内でのCurrentCellが既に1行下になっているんだと思います。

例えばフォーム上の他のコントロールにフォーカスが移動した場合も編集が終了しますが、
この場合はどうでしょう?
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-02-23 18:14
すみません。訂正です。

引用:

ですからCellEndEditイベント内でのCurrentCellが既に1行下になっているんだと思います。



今、確認してみたのですが、これは違ったみたいです。
デバッガでみるとCellEndEdit内でCurrentCellをみてみると
確かに編集前の行番号になっていました。
フォーム内の他のコントロールに移動して編集終了した場合は右にずれてくれたので
早とちりしてしまいました。

Enterキーで編集を終えたときに下に移動するのではなく右に移動したいのですよね?
CellEndEdit はEnterキー以外の要因(フォーカス移動とか、別のセルのクリックとか)で
編集モードが終わらされても発生するイベントですので、不適切と思います。
このあたりが参考になりますか?

http://vsug.jp/tabid/63/forumid/72/postid/4370/view/topic/Default.aspx
yumi
常連さん
会議室デビュー日: 2006/09/28
投稿数: 33
投稿日時: 2007-02-23 18:30
お返事ありがとうございます。
ユーザーコントロールを作らないといけないわけですか。
私は全然違う方向を探していたみたいですね。
DataGridViewは難しいです・・・。
DataGridViewの事を詳しく説明している本を、今探しています。

1

スキルアップ/キャリアアップ(JOB@IT)