GcDateTime型セルのMinDateとMaxDateを実行時に変更すると例外が発生することがある
対象製品
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
【手順】
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
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