作成日: 2019/09/03 最終更新日: 2021/07/28
文書種別
不具合
状況
修正済み
詳細
列のMergePolicyプロパティをAlwaysまたはRestrictedに設定しているとき、行ヘッダまたはコーナーヘッダをクリックして、行やグリッド全体を選択した状態でCtrl + Cを押下すると、ArgumentOutOfRangeExceptionの例外が発生します。
また、このとき、InsertUnboundRowメソッドで行を追加すると、列ヘッダをクリックして列全体を選択した場合にも、Ctrl + Cの押下で同じエラーが発生します。
また、このとき、InsertUnboundRowメソッドで行を追加すると、列ヘッダをクリックして列全体を選択した場合にも、Ctrl + Cの押下で同じエラーが発生します。
回避方法
Service Pack 5(v2.0.2021.0728)で修正済みです。
Service Pack 5(v2.0.2021.0726)より前のバージョンでは以下のいずれかの回避方法が有効です。
- ヘッダのクリックにより行またはグリッド全体が選択された状態のときにCtrl + Cキーが押された場合、下記のコードのようにPreviewKeyDownイベントを使用して、選択範囲を変更する。
◎サンプルコード(C#)
using GrapeCity.Windows.SpreadGrid; public MainWindow() { InitializeComponent(); Spread.AddHandler(PreviewKeyDownEvent, new KeyEventHandler(Spread_PreviewKeyDown)); } private void Spread_PreviewKeyDown(object sender, KeyEventArgs e) { var isCtrlDown = Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl); var isCopyKeyGesture = e.Key == Key.C && isCtrlDown; if (isCopyKeyGesture) { var willCrash = DetectCrash(); if (willCrash) { ChangeCopySelectedRanges(); } } } private bool DetectCrash() { bool willCrash = false; foreach (var selRange in Spread.SelectedRanges) { if (selRange.RangeType.HasFlag(CellRangeType.Rows) || selRange.RangeType.HasFlag(CellRangeType.Columns)) { willCrash = true; } } return willCrash; } private void ChangeCopySelectedRanges() { var oldSelectedRanges = Spread.SelectedRanges; var selectType = SelectionType.New; if (oldSelectedRanges.Count > 1) { Spread.ResetSelection(); selectType = SelectionType.Add; } foreach (var selRange in oldSelectedRanges) { ChangeCopySelectedRange(selectType, selRange); } } private void ChangeCopySelectedRange(SelectionType selectType, CellRange selRange) { if (selRange.RangeType == CellRangeType.Rows) { var range = new CellRange(selRange.Row, 0, selRange.RowCount, Spread.ColumnCount); Spread.Select(range, selectType); } else if (selRange.RangeType == CellRangeType.Columns) { var range = new CellRange(0, selRange.Column, spd3.RowCount, selRange.ColumnCount); spd3.Select(range, selectType); } else if (selRange.RangeType == CellRangeType.All) { var range = new CellRange(0, 0, Spread.RowCount, Spread.ColumnCount); Spread.Select(range, selectType); } else { Spread.Select(selRange, selectType); } }
- HeaderSelectionOptionsプロパティを設定して、ヘッダのクリックによる行またはグリッド全体の選択自体を無効にする。
◎サンプルコード(C#)
Spread.HeaderSelectionOptions = HeaderSelectionOptions.ColumnHeader;
旧文書番号
84433