完全に表示されていないチェックボックス型セルをクリックしてもチェック状態が変わらない
対象製品
SPREAD for Windows Forms 7.0J
詳細
【手順】
1.新規フォームにSPREADを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.A2セルをクリックします
--A2セルの編集が開始し先頭にスクロールされます
--A2セルのチェックボックスはチェックされません
【サンプルコード】
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' SPREADの設定
FpSpread1.Height = 200
FpSpread1.ActiveSheet.Rows.Default.Height = 100
' チェックボックス型セルの設定
Dim ckbxcell As New FarPoint.Win.Spread.CellType.CheckBoxCellType()
FpSpread1.ActiveSheet.Columns(0).CellType = ckbxcell
End Sub
SPREADのチェックボックス型セルは以下のように動作するため、マウスボタンを離したタイミングでチェックボックス型セルにマウスカーソルがないとチェック状態が変更されません。
(1)マウスボタンを押下したタイミングでセルの編集が開始し、完全に表示されていないセルはスクロールされる
(2)チェック状態の変更はマウスボタンが離されたタイミングで行われ、エディタ上にマウスポインタがないとチェック状態の変更は行われない
1.新規フォームにSPREADを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.A2セルをクリックします
--A2セルの編集が開始し先頭にスクロールされます
--A2セルのチェックボックスはチェックされません
【サンプルコード】
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' SPREADの設定
FpSpread1.Height = 200
FpSpread1.ActiveSheet.Rows.Default.Height = 100
' チェックボックス型セルの設定
Dim ckbxcell As New FarPoint.Win.Spread.CellType.CheckBoxCellType()
FpSpread1.ActiveSheet.Columns(0).CellType = ckbxcell
End Sub
SPREADのチェックボックス型セルは以下のように動作するため、マウスボタンを離したタイミングでチェックボックス型セルにマウスカーソルがないとチェック状態が変更されません。
(1)マウスボタンを押下したタイミングでセルの編集が開始し、完全に表示されていないセルはスクロールされる
(2)チェック状態の変更はマウスボタンが離されたタイミングで行われ、エディタ上にマウスポインタがないとチェック状態の変更は行われない
回避方法
CellClickイベントを使用してチェック状態を変更します。
【サンプルコード】
Private Sub FpSpread1_CellClick(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.CellClickEventArgs) Handles FpSpread1.CellClick
' 第1列(チェックボックス型セル)の場合
If e.Column = 0 Then
' 既定の動作のキャンセル
e.Cancel = True
' シートの取得
Dim sheet As FarPoint.Win.Spread.SheetView = e.View.GetSheetView()
' 対象セルの表示
sheet.SetActiveCell(e.Row, e.Column)
e.View.ShowCell(0, 0, e.Row, e.Column, FarPoint.Win.Spread.VerticalPosition.Nearest, FarPoint.Win.Spread.HorizontalPosition.Nearest)
' チェック状態の切り替え
sheet.SetValue(e.Row, e.Column, Not sheet.GetValue(e.Row, e.Column))
End If
End Sub
【サンプルコード】
Private Sub FpSpread1_CellClick(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.CellClickEventArgs) Handles FpSpread1.CellClick
' 第1列(チェックボックス型セル)の場合
If e.Column = 0 Then
' 既定の動作のキャンセル
e.Cancel = True
' シートの取得
Dim sheet As FarPoint.Win.Spread.SheetView = e.View.GetSheetView()
' 対象セルの表示
sheet.SetActiveCell(e.Row, e.Column)
e.View.ShowCell(0, 0, e.Row, e.Column, FarPoint.Win.Spread.VerticalPosition.Nearest, FarPoint.Win.Spread.HorizontalPosition.Nearest)
' チェック状態の切り替え
sheet.SetValue(e.Row, e.Column, Not sheet.GetValue(e.Row, e.Column))
End If
End Sub