SelectionChangingイベントでメッセージボックスを表示すると、SelectionChangingイベントの後にSelectionChangedイベントが発生しない場合がある
対象製品
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
【手順】
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
この場合、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