行モード(RowMode)でドラッグしながらセル移動している途中でコンテキストメニューを表示すると、LeaveCellイベントが発生しない
対象製品
SPREAD for Windows Forms 7.0J
状況
修正済み
詳細
行モード(RowMode)でドラッグしながらセル移動している途中でコンテキストメニューを表示すると、アクティブセルの移動が完了してもLeaveCellイベントが発生しません。
※通常、LeaveCellイベントはマウスの左ボタンを離したアクティブセルの決定(ドラッグ操作の終了)時に発生します。
【手順】
1.新規フォームにSPREADを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.A1セルをクリックしマウスボタンを押下したままB5セルまでドラッグします
4.マウスの右ボタンをクリックします
5.コンテキストメニューをクリックします
--アクティブセルが移動しますが、LeaveCellイベントが発生しません
【サンプルコード】
Private WithEvents cMenu As ContextMenuStrip
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' ContextMenuStripの設定
cMenu = New System.Windows.Forms.ContextMenuStrip()
cMenu.Items.Add("test")
FpSpread1.ContextMenuStrip = cMenu
' SPREADの設定
FpSpread1.ActiveSheet.OperationMode = FarPoint.Win.Spread.OperationMode.RowMode
End Sub
Private Sub FpSpread1_LeaveCell(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.LeaveCellEventArgs) Handles FpSpread1.LeaveCell
' イベント発生の確認
Label1.Text += System.Environment.NewLine + "row=" + e.Row.ToString() + ", col=" + e.Column.ToString() + ", newRow=" + e.NewRow.ToString() + ", newCol=" + e.NewColumn.ToString()
End Sub
※通常、LeaveCellイベントはマウスの左ボタンを離したアクティブセルの決定(ドラッグ操作の終了)時に発生します。
【手順】
1.新規フォームにSPREADを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.A1セルをクリックしマウスボタンを押下したままB5セルまでドラッグします
4.マウスの右ボタンをクリックします
5.コンテキストメニューをクリックします
--アクティブセルが移動しますが、LeaveCellイベントが発生しません
【サンプルコード】
Private WithEvents cMenu As ContextMenuStrip
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' ContextMenuStripの設定
cMenu = New System.Windows.Forms.ContextMenuStrip()
cMenu.Items.Add("test")
FpSpread1.ContextMenuStrip = cMenu
' SPREADの設定
FpSpread1.ActiveSheet.OperationMode = FarPoint.Win.Spread.OperationMode.RowMode
End Sub
Private Sub FpSpread1_LeaveCell(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.LeaveCellEventArgs) Handles FpSpread1.LeaveCell
' イベント発生の確認
Label1.Text += System.Environment.NewLine + "row=" + e.Row.ToString() + ", col=" + e.Column.ToString() + ", newRow=" + e.NewRow.ToString() + ", newCol=" + e.NewColumn.ToString()
End Sub
回避方法
Service Pack 4(v7.0.2016.2008)で修正済み。
Service Pack 4(v7.0.2016.2008)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
コンテキストメニューのOpenedイベントでコンテキストメニューにフォーカス移動させます。
【サンプルコード】
Private Sub cMenu_Opened(ByVal sender As Object, ByVal e As System.EventArgs) Handles cMenu.Opened
FpSpread1.ContextMenuStrip.Focus()
End Sub
Service Pack 4(v7.0.2016.2008)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
コンテキストメニューのOpenedイベントでコンテキストメニューにフォーカス移動させます。
【サンプルコード】
Private Sub cMenu_Opened(ByVal sender As Object, ByVal e As System.EventArgs) Handles cMenu.Opened
FpSpread1.ContextMenuStrip.Focus()
End Sub