MultiRowでは和暦のサポートは.NET Frameworkに準じます。日付の値を入力または表示できるDateTimePickerCellでは、次のいずれかの方法で和暦を表示できます。
コントロールパネルで「カレンダーの種類」を和暦に設定
Windowsのコントロールパネルでカレンダーの和暦が有効になっているとき、アプリケーション側で変更を行うことなく和暦の設定を反映できます。コントロールパネルで和暦を有効にするには、次の設定を行います。
Windows Server 2008の場合:
Windows 7の場合:
この結果、次のようにDateTimePickerCellとドロップダウンカレンダーに和暦が適用されます。
Windows Server 2008の場合:
- コントロールパネルの「地域と言語のオプション」を開く。
- 「地域と言語のオプション」画面で「形式」タブから「この形式のカスタマイズ」ボタンをクリックする。
- 表示された「地域のオプションのカスタマイズ」画面で、「日付」タブをクリックする。
- 「カレンダーの種類」から「和暦」を選択する。
- [OK]ボタンをクリックして設定を適用する。
Windows 7の場合:
- コントロールパネルの「時計、言語、および地域」の「地域と言語」を開く。
- 「地域と言語」画面で「形式」タブから「追加の設定」ボタンをクリックする。
- 表示された「形式のカスタマイズ」画面で、「日付」タブをクリックする。
- 「カレンダーの種類」から「和暦」を選択する。
- [OK]ボタンをクリックして設定を適用する。
Windows 8以降の場合:
- コントロールパネルの「時計、言語、および地域」の「地域」を開く。
- 「地域」画面で「形式」タブから「追加の設定」ボタンをクリックする。
- 表示された「形式のカスタマイズ」画面で、「日付」タブをクリックする。
- 「カレンダーの種類」から「和暦」を選択する。
- [OK]ボタンをクリックして設定を適用する。
この結果、次のようにDateTimePickerCellとドロップダウンカレンダーに和暦が適用されます。
アプリケーションのカルチャ変更
アプリケーションのカルチャを変更し、日本形式のカレンダーを適用することでシステム全体に影響することなく和暦を使用できます。ただし、DateTimePickerコントロールのドロップダウンカレンダーはシステムの設定が有効のため、この部分は和暦で表示されません。
Imports System.Globalization Dim jpCalendar As New JapaneseCalendar() Dim cultureInfo As New CultureInfo("ja-JP") cultureInfo.DateTimeFormat.Calendar = jpCalendar Application.CurrentCulture = cultureInfo
using System.Globalization; JapaneseCalendar jpCalendar = new JapaneseCalendar(); CultureInfo cultureInfo = new CultureInfo("ja-JP"); cultureInfo.DateTimeFormat.Calendar = jpCalendar; Application.CurrentCulture = cultureInfo;
DateTimePickerCellの書式変更
DateTimePickerCellは、標準のDateTimePickerコントロールと同じようにカスタム書式を使用できます。ここに日本のカルチャから取得した日本形式のカレンダーを適用することでDateTimePickerCellに限定して和暦を使用することができます。
デザイナでは、DateTimePickerCell.CustomFormatプロパティにCultureInfoの情報を書き込めないため、設計時にこの情報を設定することはできません。この場合、次のようなコードでテンプレート内のDateTimePickerCell.CustomFormatプロパティだけを実行時に設定できます。
Imports System.Globalization Imports GrapeCity.Win.MultiRow Private _CultureInfo As CultureInfo = Nothing Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim jpCalendar As New JapaneseCalendar() _CultureInfo = New CultureInfo("ja-JP") _CultureInfo.DateTimeFormat.Calendar = jpCalendar Dim DateTimePickerCell1 As New DateTimePickerCell() DateTimePickerCell1.Format = DateTimePickerFormat.Custom DateTimePickerCell1.CustomFormat = DateTime.Now.ToString("gg yy", _CultureInfo) & "年MM月dd日 dddd tt:hh:mm:ss" Dim Template1 As Template = Template.CreateGridTemplate(New Cell() { DateTimePickerCell1 }) GcMultiRow1.Template = Template1 End Sub Private Sub GcMultiRow1_CellBeginEdit(ByVal sender As System.Object, ByVal e As CellBeginEditEventArgs) Handles GcMultiRow1.CellBeginEdit Dim gcMultiRow As GcMultiRow = TryCast(sender, GcMultiRow) If TypeOf gcMultiRow.CurrentCell Is DateTimePickerCell Then Dim dtpCell As DateTimePickerCell = TryCast(gcMultiRow.CurrentCell, DateTimePickerCell) dtpCell.Format = DateTimePickerFormat.Custom Dim dateTime As Date If dtpCell.Value = Nothing Then dateTime = Date.Now Else dateTime = CType(dtpCell.Value, Date) End If dtpCell.CustomFormat = dateTime.ToString("gg yy", _CultureInfo) & "年MM月dd日 dddd tt:hh:mm:ss" End If End Sub Private Sub GcMultiRow1_EditingControlShowing(ByVal sender As System.Object, ByVal e As EditingControlShowingEventArgs) Handles GcMultiRow1.EditingControlShowing Dim gcMultiRow As GcMultiRow = TryCast(sender, GcMultiRow) If TypeOf e.Control Is DateTimePickerEditingControl Then Dim dtpEditingControl As DateTimePickerEditingControl = TryCast(e.Control, DateTimePickerEditingControl) RemoveHandler dtpEditingControl.ValueChanged, AddressOf Me.dtpEditingControl_ValueChanged AddHandler dtpEditingControl.ValueChanged, AddressOf Me.dtpEditingControl_ValueChanged End If End Sub Private Sub dtpEditingControl_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim dtpControl As DateTimePicker = TryCast(sender, DateTimePicker) If dtpControl IsNot Nothing Then dtpControl.Format = DateTimePickerFormat.Custom dtpControl.CustomFormat = dtpControl.Value.ToString("gg yy", _CultureInfo) & "年MM月dd日 dddd tt:hh:mm:ss" End If End Sub
using GrapeCity.Win.MultiRow; using System.Globalization; private CultureInfo _CultureInfo = null; private void Form1_Load(object sender, EventArgs e) { JapaneseCalendar jpCalendar = new JapaneseCalendar(); _CultureInfo = new CultureInfo("ja-JP"); _CultureInfo.DateTimeFormat.Calendar = jpCalendar; DateTimePickerCell dateTimePickerCell1 = new DateTimePickerCell(); dateTimePickerCell1.Format = DateTimePickerFormat.Custom; dateTimePickerCell1.CustomFormat = DateTime.Now.ToString("gg yy", _CultureInfo) + "年MM月dd日 dddd tt:hh:mm:ss"; Template template1 = Template.CreateGridTemplate(new Cell[] { dateTimePickerCell1 }); gcMultiRow1.Template = template1; } private void gcMultiRow1_CellBeginEdit(object sender, CellBeginEditEventArgs e) { GcMultiRow gcMultiRow = (GcMultiRow)sender; if (gcMultiRow.CurrentCell is DateTimePickerCell) { DateTimePickerCell dtpCell = gcMultiRow.CurrentCell as DateTimePickerCell; dtpCell.Format = DateTimePickerFormat.Custom; DateTime dateTime; if (dtpCell.Value == null) { dateTime = DateTime.Now; } else { dateTime = (DateTime)dtpCell.Value; } dtpCell.CustomFormat = dateTime.ToString("gg yy", _CultureInfo) + "年MM月dd日 dddd tt:hh:mm:ss"; } } private void gcMultiRow1_EditingControlShowing(object sender, EditingControlShowingEventArgs e) { GcMultiRow gcMultiRow = (GcMultiRow)sender; if (e.Control is DateTimePickerEditingControl) { DateTimePickerEditingControl dtpEditingControl = e.Control as DateTimePickerEditingControl; dtpEditingControl.ValueChanged -= new EventHandler(dtpEditingControl_ValueChanged); dtpEditingControl.ValueChanged += new EventHandler(dtpEditingControl_ValueChanged); } } private void dtpEditingControl_ValueChanged(object sender, EventArgs e) { DateTimePicker dtpControl = sender as DateTimePicker; if (dtpControl != null) { dtpControl.Format = DateTimePickerFormat.Custom; dtpControl.CustomFormat = dtpControl.Value.ToString("gg yy", _CultureInfo) + "年MM月dd日 dddd tt:hh:mm:ss"; } }
デザイナでは、DateTimePickerCell.CustomFormatプロパティにCultureInfoの情報を書き込めないため、設計時にこの情報を設定することはできません。この場合、次のようなコードでテンプレート内のDateTimePickerCell.CustomFormatプロパティだけを実行時に設定できます。
Dim Template1 As Template = GcMultiRow1.Template; For Each cell As Cell In myTemplate.Row.Cells If TypeOf cell Is DateTimePickerCell Then Dim dtpCell As DateTimePickerCell = DirectCast(cell, DateTimePickerCell) dtpCell.Format = DateTimePickerFormat.Custom dtpCell.CustomFormat = DateTime.Now.ToString("gg yy", _CultureInfo) & "年MM月dd日 dddd tt:hh:mm:ss" End If Next GcMultiRow1.Template = Template1;
Template template1 = gcMultiRow1.Template; foreach (Cell cell in template1.Row.Cells) { if (cell is DateTimePickerCell) { DateTimePickerCell dtpCell = cell as DateTimePickerCell; dtpCell.Format = DateTimePickerFormat.Custom; dtpCell.CustomFormat = DateTime.Now.ToString("gg yy", _CultureInfo) + "年MM月dd日 dddd tt:hh:mm:ss"; } } gcMultiRow1.Template = template1;