True DBGrid for WinForms
移動とスクロール
エンドユーザーの操作 > 移動とスクロール

以下の各項では、グリッドのデフォルトの移動とスクロールの動作について説明します。[Tab] キーや矢印キーの動作のほか、行やスプリットの境界に達した場合の現在のセルの位置まで完全に制御できます。

マウスナビゲーション操作

ユーザーが現在のセル以外のセルをクリックすると、BeforeRowColChange イベントが発生します。このイベントがキャンセルされないかぎり、クリックされたセルが現在のセルになります。その後、更新操作が完了すると、 RowColChange イベントが発生します。ただし、次の場合は例外です。

ユーザーは、マウスを使ってグリッドのスクロールバーを操作し、グリッドの表示領域外にあるセルを表示することもできます。垂直スクロールバーは行を、水平スクロールバーは列を管理します。HScrollBar プロパティは、水平スクロールバーを表示するかどうかを制御し、VScrollBar プロパティは垂直スクロールバーを制御します。

スクロールは、常にセル単位で行われます。どちらの方向にもピクセル単位でスクロールすることはできません。

スクロールバーは現在のセルを変更しないことに注意してください。したがって、現在のセルがグリッド内に表示されていない場合があります。

コード内で垂直スクロール操作に応答するには、FirstRowChange イベントを使用します。水平スクロール操作に応答するには、 LeftColChange イベントを使用します。

右端の列をクリックする

グリッドには、常に左端の列(最初の表示列)の全体が表示されます。反対に、通常、右端の列は部分的に表示されます。この部分的に表示されている右端の列がクリックされた場合の動作は、グリッドのExposeCellMode プロパティで制御します。

ExposeCellMode プロパティのデフォルト値は、ExposeCellModeEnum.ScrollOnSelectです。部分的に表示されている右端の列がクリックされると、この列全体が表示されるようにグリッドが左にスクロールします。部分的に表示されている右端の列をクリックすると、必ずグリッドが左に移動するため、グリッドをクリックして編集を開始することが多い場合、これは好ましい動作ではありません。

ExposeCellModeExposeCellModeEnum.ScrollOnEditに設定すると、右端に表示されている列をクリックしても、グリッドはスクロールしません。ただし、セルを編集しようとすると、グリッドが左にスクロールして、その列全体が表示されます。Microsoft Excel はこのように動作します。ユーザーにとっては、これが最も使い慣れた設定です。

ExposeCellModeExposeCellModeEnum.ScrollNeverに設定すると、セルを編集しようとしても、グリッドがスクロールして右端の列が表示されることがありません。列の一部しか表示されていないと、編集作業が難しくなります。この設定を使用するのは、セルの編集に必要な領域が常に十分あることがわかっている場合や編集を許可していない場合に、グリッドが誤って移動しないようにするためです。

ExposeCellMode プロパティは、ユーザーが右端に表示されている列をクリックした場合の動作を制御します。右端の列にコード(グリッドのCol プロパティを設定)やキーボード操作によって移動した場合、グリッドは常にスクロールして、その列全体が表示されます。

キーボードナビゲーション操作

True DBGrid for WinForms では、キーボードショートカットが提供されていますので、ユーザーの実行時操作に役に立ちます。デフォルトでは、ユーザーは、矢印キー、Enter キー、Tab キー、PageUpキー、[PageDown] キー、Home キー、および End キーを使ってグリッド内を移動できます。

キー 動作
[↑]/[↓] キー 現在のセルを隣の行に移動します。
[←]/[→] キー

AllowArrows プロパティが True (デフォルト)の場合、これらのキーは現在のセルを隣の列に移動します。
AllowArrows プロパティが False の場合、これらのキーは、コントロール間の移動に使用され、セル間の移動には使用できません。

[Enter] キー デフォルトでは、[Enter] キーの動作は [→] キーと同じで、現在のセルを左から右へ隣の列に移動します。[Enter] キーの動作を変更するには、DirectionAfterEnter プロパティを使用します。セル編集時に、Enter キーで編集を保存し、次のセルに移動します。
[Tab] キー TabAction プロパティの値が Control Navigation (デフォルト)の場合、[Tab] キーは、タブオーダーの指定に従って、フォーム上の次のコントロールにフォーカスを移動します。

TabAction プロパティが ColumnNavigation または GridNavigation の場合、[Tab] キーは、現在のセルを次の列に移動します。また、[Shift] + [Tab] キーを使用して、現在のセルを前の列に移動します。列とグリッドの移動の違いについては、次の項を参照してください。

[PageUp]/[PageDown] キー グリッドのページ全体を1度に上下にスクロールします。垂直スクロールバーとは異なり、[PageUp] キーおよび [PageDown] キーは、グリッドに表示されている行の数に応じて、現在の行を変更します。ページアップすると、表示領域内の最初の行が現在の行になります。ページダウンすると、AddNew 行も含めて、表示領域内の最後の行が現在の行になります。現在の列は変化しません。
[Home]/[End] キー 現在のセルを最初の列または最後の列に移動します。必要に応じて、グリッドが水平方向にスクロールして、現在のセルが表示されます。現在の行は変化しません。現在のセルが編集中の場合、[Home] キーと [End] キーは、挿入ポイントをセルのテキストの先頭または末尾に移動します。
[F2] データシート内の編集モード(挿入ポイントを表示)とナビゲーションモードの間で切り替えます。フォームまたはレポートの操作時にナビゲーションモードを離れるには、[Esc]を押します。
[F4] このキーはコンボボックスの表示/非表示にします。
[Alt]+ 下矢印
このキーの組み合わせを使ってコンボボックス(C1TrueDBG など)を表示できます。
ALT + LEFT ARROW
ALT+RIGHT ARROW
[Delete] 〈Delete〉ボタンは行を削除します。編集モードでは、[Delete]キーはカーソルの右側にあるコンテンツを削除して、セルの選択されたコンテンツを削除します。
スペースバー [スペースバー]キーは、ボタンクリック、およびチェックボックスとラジオボタンの ON/OFF を開始します。
[Ctrl]+[C] このキーの組み合わせは選択されたコンテンツをクリップボードにコピーします。 
[Ctrl]+[V] このキーの組み合わせはクリップボードのコンテンツを選択された位置に貼り付けます。
[Ctrl]+[X] このキーの組み合わせは選択されたコンテンツを切り取ってクリップボードにコピーします。
[BackSpace]、[Ctrl]+[H] 編集モードでは、[BackSpace]キーまたは[Ctrl]+[H]キーの組み合わせを使ってカーソルの左側のコンテンツを削除して、セルからコンテンツを削除できます。
[Tab] [Tab]キーは、すべてのコンテンツの変更を保存して選択された現在のセルを離れて、セルの編集モードを終了します。
[Insert] セルの編集モードでは、[Insert]キーはテキストをセル内に入力する方法を変更します。[Insert]キーがアクティブのとき、入力されたテキストが既存のコンテンツを上書きします。
[Ctrl]+ 上/下矢印 これらのキーの組み合わせにより、リストボックス内を移動できます。[Ctrl]+ 上矢印キーの組み合わせの場合、リストボックス内の前の項目まで上方に移動できます。[Ctrl]+ 下矢印キーの場合、次の項目まで下方に移動できます。

行の境界での移動

グリッドの行の境界、つまり最初の列と最後の列の間での移動は、WrapCellPointer プロパティによってその動作が決まります。次の説明では、AllowArrows プロパティが True に、TabAction プロパティが ColumnNavigation または GridNavigation のいずれかに設定されているとします。

キー 動作
[←]/[→] キー WrapCellPointer プロパティが True の場合、現在のセルは行の境界を越えて移動します。現在のセルが最後の列にある場合に [→] キーを押すと、現在のセルが次の行の最初の列に移動します。現在のセルが最初の列にある場合に [←] キーを押すと、現在のセルが前の行の最後の列に移動します。
WrapCellPointer プロパティが False (デフォルト)の場合、これらのキーによって、行の境界にある現在のセルを移動することはできません。
[Tab] キー TabAction プロパティが ColumnNavigation の場合、カーソルは隣の行に移動せず、WrapCellPointer プロパティは無視されます。現在のセルが最後の列にある場合に [Tab] キーを押すと、フォーカスがタブオーダーの次のコントロールに移動します。現在のセルが最初の列にある場合に [Shift] + [Tab] キーを押すと、フォーカスがタブオーダーの前のコントロールに移動します。
TabAction プロパティが GridNavigationWrapCellPointerTrue の場合、[Tab] キーや [Shift]+[Tab] キーを押すと、現在のセルが次または前の行に移動します。WrapCellPointerFalse の場合、現在のセルは行の境界を越えて移動しません。

スプリットの境界での移動

グリッドのスプリットの境界での移動は、TabAcrossSplits プロパティの設定に基づいて、次のように動作します。

キー 動作
[←]/[→] キー TabAcrossSplits プロパティが True の場合、これらのキーを押すと、現在のセルがスプリットの境界を越えて前後のスプリットに移動します。
TabAcrossSplits プロパティが False (デフォルト)の場合、スプリットの境界でのこれらのキーの動作は、行の境界での各キーの動作と同じになります。これらのキーによって現在のセルを別のスプリットに移動させるには、移動先のスプリットのAllowFocus プロパティが True である必要があります。
[Tab] キー [Tab] キーおよび [Shift]+[Tab] キーの動作は、上の矢印キーの説明と同様に、TabAcrossSplits の設定に従います。

セル間の移動を制限する

BeforeRowColChange イベントを使用すると、現在のセルが変更されたかどうかに関係なく、ユーザーが別のセルに移動できないようにできます。現在のセルが別のセルに移動しないようにするには、Cancel 引数を True に設定します。

BeforeColUpdate イベントを使用すると、現在のセルが変更された場合に、他のグリッドセルに移動する前にセルの値を検査できます。入力された値が無効である場合は、Cancel 引数を True に設定して、現在のセルが変更されないようにできます。また、警告音を鳴らしたり、エラーメッセージを表示することもできます。このように、BeforeColUpdate イベントでは、柔軟にユーザーの入力を検証したり、セル間の移動を制限することができます。

Visual Basic コードの書き方

Visual Basic
Copy Code
Private Sub C1TrueDBGrid1_BeforeColUpdate(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.BeforeColUpdateEventArgs) Handles C1TrueDBGrid1.BeforeColUpdate
    Dim CharCode As Integer
    If e.ColIndex = 1 Then
 
        ' 列 1 のデータは大文字で始まる必要があります
        CharCode = Asc(Me.C1TrueDBGrid1.Columns(1).Text)
        If CharCode > 64 And CharCode < 91 Then Exit Sub
        
        ' ユーザーに警告メッセージを表示します
        MessageBox.Show("Last name must start with upper case")
    
        ' データの検証に失敗したため、ユーザーに別のセルへの移動を禁止します
        e.Cancel = True
    End If
End Sub

C# コードの書き方

C#
Copy Code
private void c1TrueDBGrid1_BeforeColUpdate(object sender, C1.Win.C1TrueDBGrid.BeforeColUpdateEventArgs e) {
    int CharCode;
    if ( e.ColIndex == 1 ) 
    {
        // 列 1 のデータは大文字で始まる必要があります
        CharCode = this.c1TrueDBGrid1.Columns[1].Text[0];
        if ( CharCode > 64 && CharCode < 91 ) return;
 
        // ユーザーに警告メッセージを表示します
        MessagBox.Show("Last name must start with upper case");
 
        // データの検証に失敗したため、ユーザーに別のセルへの移動を禁止します
        e.Cancel = true;
    }
}