PowerTools MultiRow for Windows Forms 8.0J
和暦の表示


MultiRowでは和暦のサポートは.NET Frameworkに準じます。日付の値を入力または表示できるDateTimePickerCellでは、次のいずれかの方法で和暦を表示できます。
コントロールパネルで「カレンダーの種類」を和暦に設定
Windowsのコントロールパネルでカレンダーの和暦が有効になっているとき、アプリケーション側で変更を行うことなく和暦の設定を反映できます。コントロールパネルで和暦を有効にするには、次の設定を行います。

Windows Vista、Windows Server 2008の場合:            
  1. コントロールパネルの「地域と言語のオプション」を開く。
  2. 「地域と言語のオプション」画面で「形式」タブから「この形式のカスタマイズ」ボタンをクリックする。
  3. 表示された「地域のオプションのカスタマイズ」画面で、「日付」タブをクリックする。
  4. 「カレンダーの種類」から「和暦」を選択する。
  5. [OK]ボタンをクリックして設定を適用する。

Windows 7の場合:
  1. コントロールパネルの「時計、言語、および地域」の「地域と言語」を開く。
  2. 「地域と言語」画面で「形式」タブから「追加の設定」ボタンをクリックする。
  3. 表示された「形式のカスタマイズ」画面で、「日付」タブをクリックする。
  4. 「カレンダーの種類」から「和暦」を選択する。
  5. [OK]ボタンをクリックして設定を適用する。

Windows 8以降の場合:

  1. コントロールパネルの「時計、言語、および地域」の「地域」を開く。
  2. 「地域」画面で「形式」タブから「追加の設定」ボタンをクリックする。
  3. 表示された「形式のカスタマイズ」画面で、「日付」タブをクリックする。
  4. 「カレンダーの種類」から「和暦」を選択する。
  5. [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に限定して和暦を使用することができます。

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;
   
参照

 

 


© 2008-2015 GrapeCity inc. All rights reserved.