ナレッジベース
[True DBGrid for Windows Forms] スプリットを追加すると、RowColChangeイベントでセルを正しく移動できない
対象製品
ComponentOne Studio 2010J
ステータス
仕様・制限
詳細
グリッドにスプリットを追加すると、RowColChangeイベント内で設定した列移動の禁止が正しく反映されず、セルを移動できてしまう
◆再現ステップ
1. フォームに C1TrueDBGridを貼り付ける
2. デザイナで新しい列を3列追加し、1列目のValuItemsをCheckBoxに設定する
3. グリッドのRowColChangeイベントに、2列目の移動を禁止するコードを記載する
if (col == 1)
{
c1TrueDBGrid1.Row = e.LastRow;
c1TrueDBGrid1.Col = preCol;
}
// 列を記憶
else preCol = col;
※col, precolはそれぞれ、現在の列、セル移動前の列を指す
4. 標準のチェックボックスを追加し、CheckedChangedイベントに、以下のように
スプリットを追加するコードを記述する
c1TrueDBGrid1.InsertHorizontalSplit(1);
c1TrueDBGrid1.Splits[0].SplitSize = 10;
5. プロジェクトを実行する
6. 1列目(col=0)のチェックボックスのチェックをONにして、新規行を追加する
7. ステップ6を5回繰り返して、5行追加する
8. 3行1列目のセルを選択する
9. 4行2列目のセルをクリックする
【結果】
3行1列目のセルに当たっていたフォーカスは移動しない(期待する動作)
10. 4で追加したチェックボックスのチェックをONにし、スプリットを表示する
11. 3行1列目のセルを選択する
12. 4行2列目のセルをクリックする
【結果】
3行1列目のセルのフォーカス枠が、3行2列目に移動する(期待する動作ではない)
※この動作は、製品仕様上の制限となります。
RowColChangeイベントは、セルの選択変更を阻止するようには設計されていません。
期待する動作を行わせるには、回避法に記載した方法をご検討ください。
◆再現ステップ
1. フォームに C1TrueDBGridを貼り付ける
2. デザイナで新しい列を3列追加し、1列目のValuItemsをCheckBoxに設定する
3. グリッドのRowColChangeイベントに、2列目の移動を禁止するコードを記載する
if (col == 1)
{
c1TrueDBGrid1.Row = e.LastRow;
c1TrueDBGrid1.Col = preCol;
}
// 列を記憶
else preCol = col;
※col, precolはそれぞれ、現在の列、セル移動前の列を指す
4. 標準のチェックボックスを追加し、CheckedChangedイベントに、以下のように
スプリットを追加するコードを記述する
c1TrueDBGrid1.InsertHorizontalSplit(1);
c1TrueDBGrid1.Splits[0].SplitSize = 10;
5. プロジェクトを実行する
6. 1列目(col=0)のチェックボックスのチェックをONにして、新規行を追加する
7. ステップ6を5回繰り返して、5行追加する
8. 3行1列目のセルを選択する
9. 4行2列目のセルをクリックする
【結果】
3行1列目のセルに当たっていたフォーカスは移動しない(期待する動作)
10. 4で追加したチェックボックスのチェックをONにし、スプリットを表示する
11. 3行1列目のセルを選択する
12. 4行2列目のセルをクリックする
【結果】
3行1列目のセルのフォーカス枠が、3行2列目に移動する(期待する動作ではない)
※この動作は、製品仕様上の制限となります。
RowColChangeイベントは、セルの選択変更を阻止するようには設計されていません。
期待する動作を行わせるには、回避法に記載した方法をご検討ください。
回避方法
次の2通りの方法が考えられます。
(A)目的の列のAllowFocusプロパティをFalseに設定する
(B)RowColChangeイベントの代わりにBeforeRowColChangeイベントを使って列移動を禁止する
(A)目的の列のAllowFocusプロパティをFalseに設定する
(B)RowColChangeイベントの代わりにBeforeRowColChangeイベントを使って列移動を禁止する


