作成日: 2013/09/05 最終更新日: 2013/09/05
文書種別
制限事項
詳細
SelectionChangedイベントでStartEditingメソッドを実行して常時編集モードにしていると、Enterキーを押してもセルが連続で移動されません。
4.0.20123.288以降のバージョンでのみ、この現象が発生します。
この現象は制限事項です。
「StartEditingメソッドで常時編集モードにしている際にカーソルの動きが不正になる」という不具合を修正するために、Enterキーの押下時にKeyUpイベントをC1FlexGridへ渡さずにセルエディタで処理する必要があったため、修正の結果、本現象が発生するようになりました。
4.0.20123.288以降のバージョンでのみ、この現象が発生します。
この現象は制限事項です。
「StartEditingメソッドで常時編集モードにしている際にカーソルの動きが不正になる」という不具合を修正するために、Enterキーの押下時にKeyUpイベントをC1FlexGridへ渡さずにセルエディタで処理する必要があったため、修正の結果、本現象が発生するようになりました。
回避方法
次のようにC1FlexGrid.PrepareCellForEditイベントでセルエディタに対してKeyUpとKeyDownイベントハンドラを定義して、セル選択を手動で更新することで、Enterキーを押した際にセルを連続で移動することができます。
◎サンプルコード (Visual Basic)
◎サンプルコード (C#)
◎サンプルコード (Visual Basic)
Private Sub C1FlexGrid1_CellEditEnding(sender As Object, e As C1.Silverlight.FlexGrid.CellEditEventArgs) Handles C1FlexGrid1.CellEditEnding
If e.Editor IsNot Nothing Then
Dim editor = e.Editor
RemoveHandler editor.KeyUp, AddressOf Editor_KeyUp
RemoveHandler editor.KeyDown, AddressOf Editor_KeyDown
End If
End Sub
Private Sub C1FlexGrid1_PrepareCellForEdit(sender As Object, e As C1.Silverlight.FlexGrid.CellEditEventArgs) Handles C1FlexGrid1.PrepareCellForEdit
If e.Editor IsNot Nothing Then
Dim editor = e.Editor
AddHandler editor.KeyUp, AddressOf Editor_KeyUp
AddHandler editor.KeyDown, AddressOf Editor_KeyDown
End If
End Sub
Private Sub C1FlexGrid1_SelectionChanged(sender As Object, e As C1.Silverlight.FlexGrid.CellRangeEventArgs) Handles C1FlexGrid1.SelectionChanged
C1FlexGrid1.StartEditing(False)
End Sub
Private Sub Editor_KeyUp(sender As Object, e As KeyEventArgs)
If e.Key = Key.Enter Then
Dispatcher.BeginInvoke(Sub()
C1FlexGrid1.StartEditing(False)
End Sub)
End If
End Sub
Private Sub Editor_KeyDown(sender As Object, e As KeyEventArgs)
Dim selection = C1FlexGrid1.Selection
If e.Key = Key.Enter Then
If selection.Column = Me.C1FlexGrid1.Columns.Count - 1 Then
C1FlexGrid1.Select(C1FlexGrid1.Selection.Row + 1, 0)
Else
C1FlexGrid1.Select(C1FlexGrid1.Selection.Row, C1FlexGrid1.Selection.Column + 1)
End If
End If
End Sub
If e.Editor IsNot Nothing Then
Dim editor = e.Editor
RemoveHandler editor.KeyUp, AddressOf Editor_KeyUp
RemoveHandler editor.KeyDown, AddressOf Editor_KeyDown
End If
End Sub
Private Sub C1FlexGrid1_PrepareCellForEdit(sender As Object, e As C1.Silverlight.FlexGrid.CellEditEventArgs) Handles C1FlexGrid1.PrepareCellForEdit
If e.Editor IsNot Nothing Then
Dim editor = e.Editor
AddHandler editor.KeyUp, AddressOf Editor_KeyUp
AddHandler editor.KeyDown, AddressOf Editor_KeyDown
End If
End Sub
Private Sub C1FlexGrid1_SelectionChanged(sender As Object, e As C1.Silverlight.FlexGrid.CellRangeEventArgs) Handles C1FlexGrid1.SelectionChanged
C1FlexGrid1.StartEditing(False)
End Sub
Private Sub Editor_KeyUp(sender As Object, e As KeyEventArgs)
If e.Key = Key.Enter Then
Dispatcher.BeginInvoke(Sub()
C1FlexGrid1.StartEditing(False)
End Sub)
End If
End Sub
Private Sub Editor_KeyDown(sender As Object, e As KeyEventArgs)
Dim selection = C1FlexGrid1.Selection
If e.Key = Key.Enter Then
If selection.Column = Me.C1FlexGrid1.Columns.Count - 1 Then
C1FlexGrid1.Select(C1FlexGrid1.Selection.Row + 1, 0)
Else
C1FlexGrid1.Select(C1FlexGrid1.Selection.Row, C1FlexGrid1.Selection.Column + 1)
End If
End If
End Sub
◎サンプルコード (C#)
private void C1FlexGrid1_CellEditEnding(object sender, C1.Silverlight.FlexGrid.CellEditEventArgs e)
{
if (e.Editor != null) {
dynamic editor = e.Editor;
editor.KeyUp -= Editor_KeyUp;
editor.KeyDown -= Editor_KeyDown;
}
}
private void C1FlexGrid1_PrepareCellForEdit(object sender, C1.Silverlight.FlexGrid.CellEditEventArgs e)
{
if (e.Editor != null) {
dynamic editor = e.Editor;
editor.KeyUp += Editor_KeyUp;
editor.KeyDown += Editor_KeyDown;
}
}
private void C1FlexGrid1_SelectionChanged(object sender, C1.Silverlight.FlexGrid.CellRangeEventArgs e)
{
C1FlexGrid1.StartEditing(false);
}
private void Editor_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter) {
Dispatcher.BeginInvoke(() => { C1FlexGrid1.StartEditing(false); });
}
}
private void Editor_KeyDown(object sender, KeyEventArgs e)
{
dynamic selection = C1FlexGrid1.Selection;
if (e.Key == Key.Enter) {
if (selection.Column == this.C1FlexGrid1.Columns.Count - 1) {
C1FlexGrid1.Select(C1FlexGrid1.Selection.Row + 1, 0);
} else {
C1FlexGrid1.Select(C1FlexGrid1.Selection.Row, C1FlexGrid1.Selection.Column + 1);
}
}
}
{
if (e.Editor != null) {
dynamic editor = e.Editor;
editor.KeyUp -= Editor_KeyUp;
editor.KeyDown -= Editor_KeyDown;
}
}
private void C1FlexGrid1_PrepareCellForEdit(object sender, C1.Silverlight.FlexGrid.CellEditEventArgs e)
{
if (e.Editor != null) {
dynamic editor = e.Editor;
editor.KeyUp += Editor_KeyUp;
editor.KeyDown += Editor_KeyDown;
}
}
private void C1FlexGrid1_SelectionChanged(object sender, C1.Silverlight.FlexGrid.CellRangeEventArgs e)
{
C1FlexGrid1.StartEditing(false);
}
private void Editor_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter) {
Dispatcher.BeginInvoke(() => { C1FlexGrid1.StartEditing(false); });
}
}
private void Editor_KeyDown(object sender, KeyEventArgs e)
{
dynamic selection = C1FlexGrid1.Selection;
if (e.Key == Key.Enter) {
if (selection.Column == this.C1FlexGrid1.Columns.Count - 1) {
C1FlexGrid1.Select(C1FlexGrid1.Selection.Row + 1, 0);
} else {
C1FlexGrid1.Select(C1FlexGrid1.Selection.Row, C1FlexGrid1.Selection.Column + 1);
}
}
}
旧文書番号
80445