Enter キーを押して編集を確定したとき、CellValidating イベントでセルの編集状態を維持する方法
対象製品
MultiRow for Windows Forms 5.0J
詳細
次のように GcMultiRow.CellValidating イベントの引数でキャンセルを有効にしたとき、MultiRow は DataGridView と異なる結果を示す場合があります。
[Visual Basic]
[C#]
マウス操作でセルを移動する場合、GcMultiRow と DataGridView の両方でセルの編集状態が維持されます。しかし、キーボード操作、Enter キーによる確定を行った場合、DataGridView ではセルの編集状態が維持されますが、GcMultiRow ではセルの編集が確定し、以降のセル移動が禁止されます。
これは、それぞれのコントロールの Enter キーに割り当てられている機能の違いが原因です。DataGridView では Enter キーはセルの移動に割り当てられていますが、GcMultiRow では既定では「セル編集の確定」に割り当てられています。
このため、次のように GcMultiRow の Enter キーをセルの移動に割り当てると、DataGridView と同じ結果を実装できます。
[Visual Basic]
[C#]
[Visual Basic]
Private Sub GcMultiRow1_CellValidating(ByVal sender As System.Object, ByVal e As GrapeCity.Win.MultiRow.CellValidatingEventArgs) Handles GcMultiRow1.CellValidating
e.Cancel = True
End Sub
e.Cancel = True
End Sub
[C#]
private void gcMultiRow1_CellValidating(object sender, GrapeCity.Win.MultiRow.CellValidatingEventArgs e)
{
e.Cancel = true;
}
{
e.Cancel = true;
}
マウス操作でセルを移動する場合、GcMultiRow と DataGridView の両方でセルの編集状態が維持されます。しかし、キーボード操作、Enter キーによる確定を行った場合、DataGridView ではセルの編集状態が維持されますが、GcMultiRow ではセルの編集が確定し、以降のセル移動が禁止されます。
これは、それぞれのコントロールの Enter キーに割り当てられている機能の違いが原因です。DataGridView では Enter キーはセルの移動に割り当てられていますが、GcMultiRow では既定では「セル編集の確定」に割り当てられています。
このため、次のように GcMultiRow の Enter キーをセルの移動に割り当てると、DataGridView と同じ結果を実装できます。
[Visual Basic]
Imports GrapeCity.Win.MultiRow
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
GcMultiRow1.ShortcutKeyManager.Unregister(Keys.Enter)
GcMultiRow1.ShortcutKeyManager.Register(SelectionActions.MoveToNextCell, Keys.Enter)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
GcMultiRow1.ShortcutKeyManager.Unregister(Keys.Enter)
GcMultiRow1.ShortcutKeyManager.Register(SelectionActions.MoveToNextCell, Keys.Enter)
End Sub
[C#]
using GrapeCity.Win.MultiRow;
private void Form1_Load(object sender, EventArgs e)
{
gcMultiRow1.ShortcutKeyManager.Unregister(Keys.Enter);
gcMultiRow1.ShortcutKeyManager.Register(SelectionActions.MoveToNextCell, Keys.Enter);
}
private void Form1_Load(object sender, EventArgs e)
{
gcMultiRow1.ShortcutKeyManager.Unregister(Keys.Enter);
gcMultiRow1.ShortcutKeyManager.Register(SelectionActions.MoveToNextCell, Keys.Enter);
}
この文書は、以前は次のFAQ IDで公開されていました : 11455