作成日: 2016/03/07 最終更新日: 2016/05/18
文書種別
不具合
状況
修正済み
詳細
セルが編集状態の時にキーボードの右側のShiftキーとTabキーを同時に押すと、マウスクリックや矢印キーでのセル選択や文字入力が、Shiftキーがずっと押されたままの動作になります。
再現手順
1. 新規プロジェクトを作成し、フォームにFlexGridを1枚貼りつける。
2. 1行1列のセルをダブルクリックして、編集状態にする。
3. キーボードの右側のShiftキーとTabキーを同時に押す。
4. 1行3列のセルをクリックする。
【結果】
1行1列~1行3列がすべて選択状態になる(不正)
※Shiftキーを押したまま1行3列のセルをクリック場合と同じ動作
5. 矢印キーで右側のセルに移動する
【結果】
開始セルから移動終了セルまですべて選択状態になる(不正)
※Shiftキーを押したまま矢印キーで移動する場合と同じ動作
6. 任意のセルを編集状態にし、「123」と入力する
【結果】
「!"#」と表示される(不正)
※Shiftキーを押したまま文字入力した場合と同じ動作
再現手順
1. 新規プロジェクトを作成し、フォームにFlexGridを1枚貼りつける。
2. 1行1列のセルをダブルクリックして、編集状態にする。
3. キーボードの右側のShiftキーとTabキーを同時に押す。
4. 1行3列のセルをクリックする。
【結果】
1行1列~1行3列がすべて選択状態になる(不正)
※Shiftキーを押したまま1行3列のセルをクリック場合と同じ動作
5. 矢印キーで右側のセルに移動する
【結果】
開始セルから移動終了セルまですべて選択状態になる(不正)
※Shiftキーを押したまま矢印キーで移動する場合と同じ動作
6. 任意のセルを編集状態にし、「123」と入力する
【結果】
「!"#」と表示される(不正)
※Shiftキーを押したまま文字入力した場合と同じ動作
回避方法
この問題はバージョン2.0.20161.147または4.0.20161.147で修正されました。
修正版の適用方法については、アップデートの方法を参照してください。
修正版を適用しない場合の回避方法は次の通りです。
右Shift+Tabをエディタ側でフックし、疑似的に前のコントロールへのフォーカス移動を再現します。
◎サンプルコード(VB)
◎サンプルコード(C#)
修正版の適用方法については、アップデートの方法を参照してください。
修正版を適用しない場合の回避方法は次の通りです。
右Shift+Tabをエディタ側でフックし、疑似的に前のコントロールへのフォーカス移動を再現します。
◎サンプルコード(VB)
Public Class Form1
Private Sub C1FlexGrid1_SetupEditor(sender As Object, e As C1.Win.C1FlexGrid.RowColEventArgs) Handles C1FlexGrid1.SetupEditor
AddHandler Me.C1FlexGrid1.Editor.KeyDown, AddressOf Editor_KeyDown
End Sub
Private Sub Editor_KeyDown(sender As Object, e As KeyEventArgs)
If e.Shift And e.KeyCode = Keys.Tab Then
If Convert.ToBoolean(GetAsyncKeyState(Keys.RShiftKey)) Then
e.Handled = True
Me.TextBox1.Focus()
End If
End If
End Sub
End Class
Private Sub C1FlexGrid1_SetupEditor(sender As Object, e As C1.Win.C1FlexGrid.RowColEventArgs) Handles C1FlexGrid1.SetupEditor
AddHandler Me.C1FlexGrid1.Editor.KeyDown, AddressOf Editor_KeyDown
End Sub
Private Sub Editor_KeyDown(sender As Object, e As KeyEventArgs)
If e.Shift And e.KeyCode = Keys.Tab Then
If Convert.ToBoolean(GetAsyncKeyState(Keys.RShiftKey)) Then
e.Handled = True
Me.TextBox1.Focus()
End If
End If
End Sub
End Class
◎サンプルコード(C#)
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
public class Form1
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
private void C1FlexGrid1_SetupEditor(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
this.C1FlexGrid1.Editor.KeyDown += Editor_KeyDown;
}
private void Editor_KeyDown(object sender, KeyEventArgs e)
{
if (e.Shift & e.KeyCode == Keys.Tab) {
if (Convert.ToBoolean(GetAsyncKeyState(Keys.RShiftKey))) {
e.Handled = true;
this.TextBox1.Focus();
}
}
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
public class Form1
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
private void C1FlexGrid1_SetupEditor(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
this.C1FlexGrid1.Editor.KeyDown += Editor_KeyDown;
}
private void Editor_KeyDown(object sender, KeyEventArgs e)
{
if (e.Shift & e.KeyCode == Keys.Tab) {
if (Convert.ToBoolean(GetAsyncKeyState(Keys.RShiftKey))) {
e.Handled = true;
this.TextBox1.Focus();
}
}
}
}
旧文書番号
81588