GcCalendarCellで、日付の選択モードを設定する方法と選択された日付を取得する方法について、以下の項目に分けて解説します。
選択日とフォーカス枠のスタイル設定については、「スタイルの設定」を参照してください。
日付選択の操作は、目的の日付をマウスでクリックするか、または矢印キーでフォーカス枠を移動し、[Space]キーを押して行います。また、SelectionModeプロパティを"MultiRich"に設定した場合は、Outlookカレンダーと同等の日付選択機能が有効になり、CtrlキーやShiftキーを使った日付選択ができます。
なお、複数選択の場合はGcCalendarEditingControl.MaxSelectionCountプロパティを使用して、選択できる最大日数を設定できます。
Imports GrapeCity.Win.MultiRow Imports PlusPakCell = GrapeCity.Win.MultiRow.PlusPak Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim GcCalendarCell1 = New PlusPak.GcCalendarCell() GcCalendarCell1.AllowSelection = GrapeCity.Win.Calendar.AllowSelection.Workday GcMultiRow1.Template = Template.CreateGridTemplate(New Cell() {GcCalendarCell1}) GcMultiRow1.RowCount = 10 End Sub Private Sub GcMultiRow1_EditingControlShowing(sender As Object, e As EditingControlShowingEventArgs) Handles GcMultiRow1.EditingControlShowing Dim gcCalendarEditor As PlusPakCell.GcCalendarEditingControl = TryCast(e.Control, PlusPakCell.GcCalendarEditingControl) If gcCalendarEditor IsNot Nothing Then ' 複数の日付を選択できるように設定します。 gcCalendarEditor.SelectionMode = GrapeCity.Win.Calendar.SelectionMode.MultiSimple ' 選択できる最大日数を設定します。 gcCalendarEditor.MaxSelectionCount = 5 End If End Sub
using GrapeCity.Win.MultiRow; using PlusPakCell = GrapeCity.Win.MultiRow.PlusPak; private void Form1_Load(object sender, EventArgs e) { PlusPakCell.GcCalendarCell gcCalendarCell1 = new PlusPakCell.GcCalendarCell(); gcCalendarCell1.AllowSelection = GrapeCity.Win.Calendar.AllowSelection.Workday; gcMultiRow1.Template = Template.CreateGridTemplate(new Cell[] { gcCalendarCell1 }); gcMultiRow1.RowCount = 10; gcMultiRow1.EditingControlShowing += gcMultiRow1_EditingControlShowing; } private void gcMultiRow1_EditingControlShowing(object sender, EditingControlShowingEventArgs e) { PlusPakCell.GcCalendarEditingControl gcCalendarEditor = (e.Control as PlusPakCell.GcCalendarEditingControl); if (gcCalendarEditor != null) { // 複数の日付を選択できるように設定します。 gcCalendarEditor.SelectionMode = GrapeCity.Win.Calendar.SelectionMode.MultiSimple; // 選択できる最大日数を設定します。 gcCalendarEditor.MaxSelectionCount = 5; } }
日付はコードで選択することも可能です。この場合、GcCalendarEditingControl.Selectionsプロパティが参照するSelectionCollectionコレクションの次のメソッドのいずれかを使用します。
また、選択した日付を解除するときは、次のいずれかのメソッドを使用します。
Imports GrapeCity.Win.MultiRow Imports PlusPakCell = GrapeCity.Win.MultiRow.PlusPak Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim GcCalendarCell1 = New PlusPak.GcCalendarCell() GcCalendarCell1.AllowSelection = GrapeCity.Win.Calendar.AllowSelection.Workday GcMultiRow1.Template = Template.CreateGridTemplate(New Cell() {GcCalendarCell1}) GcMultiRow1.RowCount = 10 End Sub Private Sub GcMultiRow1_EditingControlShowing(sender As Object, e As EditingControlShowingEventArgs) Handles GcMultiRow1.EditingControlShowing Dim gcCalendarEditor As PlusPakCell.GcCalendarEditingControl = TryCast(e.Control, PlusPakCell.GcCalendarEditingControl) If gcCalendarEditor IsNot Nothing Then ' 複数の日付を選択できるように設定します。 gcCalendarEditor.SelectionMode = GrapeCity.Win.Calendar.SelectionMode.MultiSimple ' 日付を選択します。 gcCalendarEditor.Selections.Add( DateTime.Today.AddDays(2)) End If End Sub
using GrapeCity.Win.MultiRow; using PlusPakCell = GrapeCity.Win.MultiRow.PlusPak; private void Form1_Load(object sender, EventArgs e) { PlusPakCell.GcCalendarCell gcCalendarCell1 = new PlusPakCell.GcCalendarCell(); gcCalendarCell1.AllowSelection = GrapeCity.Win.Calendar.AllowSelection.Workday; gcMultiRow1.Template = Template.CreateGridTemplate(new Cell[] { gcCalendarCell1 }); gcMultiRow1.RowCount = 10; gcMultiRow1.EditingControlShowing += gcMultiRow1_EditingControlShowing; } private void gcMultiRow1_EditingControlShowing(object sender, EditingControlShowingEventArgs e) { PlusPakCell.GcCalendarEditingControl gcCalendarEditor = (e.Control as PlusPakCell.GcCalendarEditingControl); if (gcCalendarEditor != null) { // 複数の日付を選択できるように設定します。 gcCalendarEditor.SelectionMode = GrapeCity.Win.Calendar.SelectionMode.MultiSimple; // 日付を選択します。 gcCalendarEditor.Selections.Add( DateTime.Today.AddDays(2)); } }
フォーカスを持っている日付は、GcCalendarEditingControl.FocusDateプロパティで取得および設定が可能です。
次のコードでは、GcMultiRow.EditingControlShowingイベントを使用して上記のそれぞれの方法で日付を取得します。
Imports GrapeCity.Win.MultiRow Imports PlusPakCell = GrapeCity.Win.MultiRow.PlusPak Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim GcCalendarCell1 = New PlusPak.GcCalendarCell() GcCalendarCell1.AllowSelection = GrapeCity.Win.Calendar.AllowSelection.Workday GcMultiRow1.Template = Template.CreateGridTemplate(New Cell() {GcCalendarCell1}) GcMultiRow1.RowCount = 10 End Sub Private Sub GcMultiRow1_EditingControlShowing(sender As Object, e As EditingControlShowingEventArgs) Handles GcMultiRow1.EditingControlShowing Dim gcCalendarEditor As PlusPakCell.GcCalendarEditingControl = TryCast(e.Control, PlusPakCell.GcCalendarEditingControl) If gcCalendarEditor IsNot Nothing Then ' 表示されている日付を取得します。 Dim _date As DateTime() = gcCalendarEditor.GetDatesInView() Console.WriteLine("表示されている最初の日付:{0}", _date(0)) ' フォーカスを持つ日付を取得します。 Console.WriteLine("フォーカスを持つ日付の日付:{0}", gcCalendarEditor.FocusDate) ' イベントの設定をします。 RemoveHandler gcCalendarEditor.ClickDate, AddressOf gcCalendarEditor_ClickDate AddHandler gcCalendarEditor.ClickDate, AddressOf gcCalendarEditor_ClickDate RemoveHandler gcCalendarEditor.MouseMove, AddressOf gcCalendarEditor_MouseMove AddHandler gcCalendarEditor.MouseMove, AddressOf gcCalendarEditor_MouseMove End If End Sub Private Sub gcCalendarEditor_ClickDate(sender As Object, e As GrapeCity.Win.Calendar.ClickDateEventArgs) ' クリックによる日付を取得します。 Console.WriteLine("クリックした日付:{0}", e.Date) End Sub Private Sub gcCalendarEditor_MouseMove(sender As Object, e As MouseEventArgs) Dim gcCalendarEditor As PlusPakCell.GcCalendarEditingControl = DirectCast(sender, PlusPakCell.GcCalendarEditingControl) ' 座標による日付を取得します。 Console.WriteLine("マウス座標の日付:{0} 曜日:{1}", _ gcCalendarEditor.DateFromPoint(e.X, e.Y), gcCalendarEditor.DayOfWeekFromPoint(e.X, e.Y)) End Sub
using GrapeCity.Win.MultiRow; using PlusPakCell = GrapeCity.Win.MultiRow.PlusPak; private void Form1_Load(object sender, EventArgs e) { PlusPakCell.GcCalendarCell gcCalendarCell1 = new PlusPakCell.GcCalendarCell(); gcCalendarCell1.AllowSelection = GrapeCity.Win.Calendar.AllowSelection.Workday; gcMultiRow1.Template = Template.CreateGridTemplate(new Cell[] { gcCalendarCell1 }); gcMultiRow1.RowCount = 10; gcMultiRow1.EditingControlShowing += gcMultiRow1_EditingControlShowing; } private void gcMultiRow1_EditingControlShowing(object sender, EditingControlShowingEventArgs e) { PlusPakCell.GcCalendarEditingControl gcCalendarEditor = (e.Control as PlusPakCell.GcCalendarEditingControl); if (gcCalendarEditor != null) { // 表示されている日付を取得します。 DateTime[] _date = gcCalendarEditor.GetDatesInView(); Console.WriteLine("表示されている最初の日付:{0}", _date[0]); // フォーカスを持つ日付を取得します。 Console.WriteLine("フォーカスを持つ日付の日付:{0}", gcCalendarEditor.FocusDate); // イベントの設定をします。 gcCalendarEditor.ClickDate -= gcCalendarEditor_ClickDate; gcCalendarEditor.ClickDate += gcCalendarEditor_ClickDate; gcCalendarEditor.MouseMove -= gcCalendarEditor_MouseMove; gcCalendarEditor.MouseMove += gcCalendarEditor_MouseMove; } } private void gcCalendarEditor_ClickDate(object sender, GrapeCity.Win.Calendar.ClickDateEventArgs e) { // クリックによる日付を取得します。 Console.WriteLine("クリックした日付:{0}", e.Date); } private void gcCalendarEditor_MouseMove(object sender, MouseEventArgs e) { PlusPakCell.GcCalendarEditingControl gcCalendarEditor = (PlusPakCell.GcCalendarEditingControl)sender; // 座標による日付を取得します。 Console.WriteLine("マウス座標の日付:{0} 曜日:{1}", gcCalendarEditor.DateFromPoint(e.X, e.Y), gcCalendarEditor.DayOfWeekFromPoint(e.X, e.Y)); }