CellClickまたはCellDoubleClickイベントによって別フォームを表示した場合、別フォーム上にフォーカスが遷移しないのは何故ですか?

文書番号 : 15912     文書種別 : 使用方法     最終更新日 : 2004/11/22
文書を印刷する
対象製品
SPREAD for .NET Windows Forms Edition
詳細
SPREADシート上でのCellClickイベントおよびCellDoubleClickイベントは、マウスボタンが押されたタイミングで発生します。

【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


この場合には、別フォームを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


◎対処方法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
関連情報
キーワード
機能・仕様 HowTo 問題

この文書は、以前は次のFAQ IDで公開されていました : 6019