MultiRowでは和暦のサポートは.NET Frameworkに準じます。日付の値を入力または表示できるDateTimePickerCellでは、次のいずれかの方法で和暦を表示できます。
Windowsのコントロールパネルでカレンダーの和暦が有効になっているとき、アプリケーション側で変更を行うことなく和暦の設定を反映できます。コントロールパネルで和暦を有効にするには、次の設定を行います。
Windows Vista、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は、標準のDateTimePickerコントロールと同じようにカスタム書式を使用できます。ここに日本のカルチャから取得した日本形式のカレンダーを適用することでDateTimePickerCellに限定して和暦を使用することができます。
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;