CellClickまたはCellDoubleClickイベントによって別フォームを表示した場合、別フォーム上にフォーカスが遷移しないのは何故ですか?
対象製品
SPREAD for .NET Windows Forms Edition
詳細
SPREADシート上でのCellClickイベントおよびCellDoubleClickイベントは、マウスボタンが押されたタイミングで発生します。
【CellClickイベント】
(1)マウスを押す ←この時点で発生します
(2)マウスを放す
【CellDoubleClickイベント】
(1)マウスを押す
(2)マウスを放す
(3)マウスを押す ←この時点で発生します
(4)マウスを放す
例えばCellDoubleClickイベントの場合、Showメソッド呼び出しにより(3)の時点で別フォームは表示されますが、親フォームが(4)のイベントを拾ってしまうため、アクティブになるのは親画面となります。
◎Showメソッド呼び出し
この場合には、別フォームをShowDialogメソッド呼び出しによって表示させる、またはCellDoubleClickイベントではなく、上記(4)で発生するMouseUpイベントにて別フォーム表示を行うことで対処することが出来ます。
◎対処方法1:ShowDialogメソッド呼び出し
◎対処方法2:MouseUpイベントでの呼び出し
【CellClickイベント】
(1)マウスを押す ←この時点で発生します
(2)マウスを放す
【CellDoubleClickイベント】
(1)マウスを押す
(2)マウスを放す
(3)マウスを押す ←この時点で発生します
(4)マウスを放す
例えばCellDoubleClickイベントの場合、Showメソッド呼び出しにより(3)の時点で別フォームは表示されますが、親フォームが(4)のイベントを拾ってしまうため、アクティブになるのは親画面となります。
◎Showメソッド呼び出し
Private Sub FpSpread1_CellDoubleClick(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.CellClickEventArgs) Handles FpSpread1.CellDoubleClick
Dim f As New Form2
f.Show()
End Sub
Dim f As New Form2
f.Show()
End Sub
この場合には、別フォームをShowDialogメソッド呼び出しによって表示させる、またはCellDoubleClickイベントではなく、上記(4)で発生するMouseUpイベントにて別フォーム表示を行うことで対処することが出来ます。
◎対処方法1:ShowDialogメソッド呼び出し
Private Sub FpSpread1_CellDoubleClick(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.CellClickEventArgs) Handles FpSpread1.CellDoubleClick
e.Cancel = True
Dim f As New Form2
f.ShowDialog()
End Sub
e.Cancel = True
Dim f As New Form2
f.ShowDialog()
End Sub
◎対処方法2:MouseUpイベントでの呼び出し
Dim flg As Boolean = False
Private Sub FpSpread1_CellDoubleClick(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.CellClickEventArgs) Handles FpSpread1.CellDoubleClick
e.Cancel = True
flg = True 'ダブルクリックされたことを示すフラグ
End Sub
Private Sub FpSpread1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles FpSpread1.MouseUp
If flg Then
Dim f As New Form2
f.Show()
End If
flg = False
End Sub
Private Sub FpSpread1_CellDoubleClick(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.CellClickEventArgs) Handles FpSpread1.CellDoubleClick
e.Cancel = True
flg = True 'ダブルクリックされたことを示すフラグ
End Sub
Private Sub FpSpread1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles FpSpread1.MouseUp
If flg Then
Dim f As New Form2
f.Show()
End If
flg = False
End Sub
関連情報
キーワード
機能・仕様 HowTo 問題
この文書は、以前は次のFAQ IDで公開されていました : 6019