GcDateTime型セルのMinDateとMaxDateを実行時に変更すると例外が発生することがある

文書番号 : 39231     文書種別 : 不具合     登録日 : 2016/01/13     最終更新日 : 2016/02/12
文書を印刷する
対象製品
SPREAD for Windows Forms 7.0J
状況
修正済み
詳細
GcDateTime型セルのMinDateとMaxDateを実行時に変更すると例外が発生することがあります。
 
【手順】
1.新規フォームにSPREADとButtonを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.A1セルをダブルクリックしてセルの編集を開始します
4.Buttonをクリックします
5.A1セルをダブルクリックしてセルの編集を開始します
  --例外(System.Exception)が発生します

【サンプルコード】
  Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Me.Text = FpSpread1.ProductVersion

    ' GcDateTimeCellType型セルの設定
    Dim dateCell As New GrapeCity.Win.Spread.InputMan.CellType.GcDateTimeCellType()
    dateCell.Fields.Clear()
    dateCell.Fields.AddRange("yyyy/MM/dd")
    dateCell.DisplayFields.Clear()
    dateCell.DisplayFields.AddRange("yyyy/MM/dd")
    dateCell.MaxDate = New DateTime(2015, 12, 31)
    dateCell.MinDate = New DateTime(2015, 1, 1)
    FpSpread1.ActiveSheet.Columns(0).CellType = dateCell
    FpSpread1.ActiveSheet.Columns(0).Width = 100
  End Sub

  Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    ' GcDateTimeCellType型セルの日付範囲の変更
    Dim dateCell As GrapeCity.Win.Spread.InputMan.CellType.GcDateTimeCellType
    dateCell = CType(FpSpread1.ActiveSheet.Columns(0).CellType, GrapeCity.Win.Spread.InputMan.CellType.GcDateTimeCellType)
    dateCell.MaxDate = New DateTime(2014, 12, 31)
    dateCell.MinDate = New DateTime(2014, 1, 1)
  End Sub
回避方法
Service Pack 6(v7.0.2019.2008)で修正済み。
Service Pack 6(v7.0.2019.2008)より前のバージョンでは次の回避方法が有効です。
------------------------------------------

セル型の日付範囲を変更する前に編集コントロールの日付範囲を最大限拡大しておきます。

【サンプルコード】
  Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    ' アクティブセル位置の保存
    Dim pos As Point = New Point(FpSpread1.ActiveSheet.ActiveRowIndex, FpSpread1.ActiveSheet.ActiveColumnIndex)

    ' GcDateTimeCellType型セルをアクティブに設定
    FpSpread1.ActiveSheet.SetActiveCell(0, 0)

    ' 編集コントロールの日付範囲の変更
    FpSpread1.StartCellEditing(Nothing, False)
    Dim dEditor As GrapeCity.Win.Spread.InputMan.CellType.GcDateTimeEditingControl = CType(FpSpread1.EditingControl, GrapeCity.Win.Spread.InputMan.CellType.GcDateTimeEditingControl)
    dEditor.MinDate = DateTime.MinValue
    dEditor.MaxDate = DateTime.MaxValue
    FpSpread1.StopCellEditing()

    ' アクティブセル位置の復元
    FpSpread1.ActiveSheet.SetActiveCell(pos.X, pos.Y)

    ' GcDateTimeCellType型セルの日付範囲の変更
    Dim dateCell As GrapeCity.Win.Spread.InputMan.CellType.GcDateTimeCellType
    dateCell = CType(FpSpread1.ActiveSheet.Columns(0).CellType, GrapeCity.Win.Spread.InputMan.CellType.GcDateTimeCellType)
    dateCell.MaxDate = New DateTime(2014, 12, 31)
    dateCell.MinDate = New DateTime(2014, 1, 1)
  End Sub