PowerTools CalendarGrid for Windows Forms 1.0J
編集モードの設定

GcCalendarGridコントロールはEditModeプロパティで編集モードを設定できます。


通常モード

通常モードは、セルの選択とセルの編集の2つの状態を持ちます。既定では、ユーザーがセルに入力するかセルをダブルクリックしたときに入力が開始されます。[Enter] キーを押すか、他のセルに移動すると入力が確定します。このモードは Excel や DataGridView コントロールに似ています。通常モードはGcCalendarコントロールの既定の編集モードです。

GcCalendarGrid1.EditMode = GrapeCity.Win.CalendarGrid.CalendarEditMode.EditOnShortcutKey
gcCalendarGrid1.EditMode = GrapeCity.Win.CalendarGrid.CalendarEditMode.EditOnShortcutKey;


常時入力モード

常時入力モードは、セルを常に編集状態にします。このモードは、TextBoxコントロールに似ています。ユーザーはセルに移動した後、ただちにセルを編集できます。

GcCalendarGrid1.EditMode = GrapeCity.Win.CalendarGrid.CalendarEditMode.EditOnEnter
gcCalendarGrid1.EditMode = GrapeCity.Win.CalendarGrid.CalendarEditMode.EditOnEnter;

注意

  • 常時入力モードが有効のとき、ドラッグ操作でセルを選択することはできません。
  • 常時入力モードを使用すると、セルを移動するたびに自動的に編集が開始されるため、キーボード操作によるスクロールの速度が低下します。
  • 常時入力モードでは、セルを移動するまで編集結果は確定しません。セルの編集中にセルの値を参照する場合、セル編集コントロールの値とカレンダーコントロールのセルの値が異なる点に注意してください。セル編集コントロールが編集中の値、カレンダーコントロールのセルが編集前の値を保持しています。この動作は、EditModeプロパティ以外の方法で常時入力モードを実装した場合にも当てはまります。


コーディングでセルの編集を開始する

開発者はショートカット キーの設定に関係なく、コーディングでセルの編集を開始できます。ただし、CalendarGridが読み取り専用であったり、セルが読み取り専用の場合、セル型が編集をサポートしていない場合はセルの編集を開始することはできません。

Imports GrapeCity.Win.CalendarGrid

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim today As DateTime = DateTime.Today
    GcCalendarGrid1.Focus()
    GcCalendarGrid1.CurrentCellPosition = New CalendarCellPosition(today, 1, 0)
    GcCalendarGrid1.BeginEdit(False)
End Sub
using GrapeCity.Win.CalendarGrid;

private void button1_Click(object sender, EventArgs e)
{
    var today = DateTime.Today;
    gcCalendarGrid1.Focus();
    gcCalendarGrid1.CurrentCellPosition = new CalendarCellPosition(today, 1, 0);
    gcCalendarGrid1.BeginEdit(false);
}

編集結果の確定にはGcCalendarGrid.EndEditメソッドを使用します。編集結果のキャンセルにはGcCalendarGrid.CancelEditメソッドを使用します。編集結果を明示的にデータソースに反映(コミット)するにはGcCalendarGrid.CommitEditメソッドを使用します。

開発者はショートカット キーのアクションを直接実行してセルの編集を開始することもできます。

GcCalendarGrid1.Focus()
GrapeCity.Win.CalendarGrid.CalendarGridActions.BeginEdit.Execute(GcCalendarGrid1)
gcCalendarGrid1.Focus();
GrapeCity.Win.CalendarGrid.CalendarGridActions.BeginEdit.Execute(gcCalendarGrid1);

GcCalendarGrid.BeginEditメソッドで編集を開始した場合、はGcCalendarGrid.CellBeginEditイベントのCalendarCellBeginEditEventArgs.BeginEditReasonプロパティの値はProgrammaticallyとなり、開発者による編集であることを確認できます。一方、ショートカットキーのアクションを実行した場合は、CalendarCellBeginEditEventArgs.BeginEditReasonプロパティの値はShortcutKeyとなります。コードによる実行と、ユーザー操作のシミュレートがそれぞれ区別されることがわかります。


編集のキャンセル

GcCalendarGrid.CellBeginEditイベントのCalendarCellBeginEditEventArgs.Cancelプロパティを使用すると、セルが編集モードに入るかどうかを制御できます。たとえば、セルの値に応じて編集を許可するかどうかを指定できます。

Imports GrapeCity.Win.CalendarGrid

Private Sub GcCalendarGrid1_CellBeginEdit(sender As Object, e As CalendarCellBeginEditEventArgs) Handles GcCalendarGrid1.CellBeginEdit
    Dim cell As CalendarCell = GcCalendarGrid1(e.CellPosition.Date)(e.CellPosition.RowIndex, e.CellPosition.ColumnIndex)

    If (cell.Value = Nothing) Then
        Return
    ElseIf cell.Value.ToString() = "A" Then
        ' セルに"A"が設定されている場合は編集をキャンセルします。
        e.Cancel = True
    End If
End Sub
using GrapeCity.Win.CalendarGrid;

private void gcCalendarGrid1_CellBeginEdit(object sender, GrapeCity.Win.CalendarGrid.CalendarCellBeginEditEventArgs e)
{
    CalendarCell cell = gcCalendarGrid1[e.CellPosition.Date][e.CellPosition.RowIndex, e.CellPosition.ColumnIndex];

    if (cell.Value == null)
    {
        return;
    }
    else if (cell.Value.ToString() == "A")
    {
        // セルに"A"が設定されている場合は編集をキャンセルします。
        e.Cancel = true;
    }
}


編集状態の取得

セルが編集状態であるかどうかは、GcCalendarGrid.IsCurrentCellInEditModeプロパティで取得できます。


参照

 

 


© 2014 GrapeCity inc. All rights reserved.