SelectionChangingイベントでメッセージボックスを表示すると、SelectionChangingイベントの後にSelectionChangedイベントが発生しない場合がある

文書番号 : 37591     文書種別 : 制限事項     登録日 : 2014/09/26     最終更新日 : 2015/11/02
文書を印刷する
対象製品
SPREAD for WPF 1.0J
詳細
SelectionChangingイベントでメッセージボックスを表示すると、SelectionChangingイベントの後にSelectionChangedイベントが発生しない場合があります。

【手順】
1.新規ウィンドウにSPREADとButtonを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.C3セルをクリックします
   --SelectionChangingイベントが発生します
4.メッセージボックスで「いいえ」をクリックします
   --C3セルに移動しますが、SelectionChangedイベントが発生しません

【サンプルコード】
  Private Sub GcSpreadGrid1_SelectionChanged(sender As Object, e As System.EventArgs) Handles GcSpreadGrid1.SelectionChanged
    Console.WriteLine("GcSpreadGrid1_SelectionChanged")
  End Sub

  Private Sub GcSpreadGrid1_SelectionChanging(sender As Object, e As GrapeCity.Windows.SpreadGrid.SelectionChangingEventArgs) Handles GcSpreadGrid1.SelectionChanging
    Console.WriteLine("GcSpreadGrid1_SelectionChanging")
    If MessageBox.Show("SelectionChangingをキャンセルしますか?", "タイトル", MessageBoxButton.YesNo) = MessageBoxResult.Yes Then
      e.Cancel = True
    End If
  End Sub
回避方法
マウスによる選択の間、SPREADはマウスをキャプチャーします。メッセージボックスを表示するとSPREADのマウスキャプチャーが失われ、選択処理のプロセスが中断されるため、後続のSelectionChangedイベントは発生しません。
この場合、SelectionChangingイベントの代わりにCellLeaveイベントを使用する方法をご検討ください。

【サンプルコード】
  Private Sub GcSpreadGrid1_CellLeave(sender As Object, e As GrapeCity.Windows.SpreadGrid.SpreadCellLeaveEventArgs) Handles GcSpreadGrid1.CellLeave
    Console.WriteLine("CellLeave")
    If MessageBox.Show("セル移動をキャンセルしますか?", "タイトル", MessageBoxButton.YesNo) = MessageBoxResult.Yes Then
      e.Cancel = True
    End If
  End Sub

  Private Sub GcSpreadGrid1_SelectionChanged(sender As Object, e As System.EventArgs) Handles GcSpreadGrid1.SelectionChanged
    Console.WriteLine("GcSpreadGrid1_SelectionChanged")
  End Sub

  'Private Sub GcSpreadGrid1_SelectionChanging(sender As Object, e As GrapeCity.Windows.SpreadGrid.SelectionChangingEventArgs) Handles GcSpreadGrid1.SelectionChanging
  '  Console.WriteLine("GcSpreadGrid1_SelectionChanging")
  '  If MessageBox.Show("SelectionChangingをキャンセルしますか?", "タイトル", MessageBoxButton.YesNo) = MessageBoxResult.Yes Then
  '    e.Cancel = True
  '  End If
  'End Sub