GcZoomを配置したフォームでSPREADのセルをダブルタップすると例外が発生することがある
対象製品
MultiTouch for Windows Forms 1.0J
状況
修正済み
詳細
以下の条件をすべて満たす場合には、NullReferenceExceptionが発生してしまいます。
・GcZoomコンポーネントとSPREADコントロールを同じフォームに配置している
・フォームはShow()またはShowDialog()メソッドで表示されている
・SPREADのCellDoubleClickイベントでフォームのDispose()メソッドを呼び出している
・タッチデバイスでSPREADのセルをダブルタップしている
※(マウスによるダブルクリックでは発生しません)
本現象はGcApplicationZoomコンポーネント、GcZoomPanelコントロールを使用した場合にも発生します。
・GcZoomコンポーネントとSPREADコントロールを同じフォームに配置している
・フォームはShow()またはShowDialog()メソッドで表示されている
・SPREADのCellDoubleClickイベントでフォームのDispose()メソッドを呼び出している
・タッチデバイスでSPREADのセルをダブルタップしている
※(マウスによるダブルクリックでは発生しません)
本現象はGcApplicationZoomコンポーネント、GcZoomPanelコントロールを使用した場合にも発生します。
回避方法
この問題はService Pack 3(v1.0.2015.1127)で修正されました。
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
また、下記のようにTimerを利用してフォームを終了するタイミングを遅らせることで例外を回避することができます。
[Visual Basic]
Private Sub FpSpread1_CellDoubleClick(sender As Object, e As FarPoint.Win.Spread.CellClickEventArgs) Handles FpSpread1.CellDoubleClick
Dim timer = New Timer()
timer.Interval = 350
timer.Start()
AddHandler timer.Tick, AddressOf AsyncClose
End Sub
Sub AsyncClose(o As Object, e As EventArgs)
Dim timer = DirectCast(o, Timer)
timer.Stop()
timer.Dispose()
Me.Dispose()
End Sub
[C#]
private void FpSpread1_CellDoubleClick(object sender, FarPoint.Win.Spread.CellClickEventArgs e)
{
object timer = new Timer();
timer.Interval = 350;
timer.Start();
timer.Tick += AsyncClose;
}
public void AsyncClose(object o, EventArgs e)
{
object timer = (Timer)o;
timer.Stop();
timer.Dispose();
this.Dispose();
}
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
また、下記のようにTimerを利用してフォームを終了するタイミングを遅らせることで例外を回避することができます。
[Visual Basic]
Private Sub FpSpread1_CellDoubleClick(sender As Object, e As FarPoint.Win.Spread.CellClickEventArgs) Handles FpSpread1.CellDoubleClick
Dim timer = New Timer()
timer.Interval = 350
timer.Start()
AddHandler timer.Tick, AddressOf AsyncClose
End Sub
Sub AsyncClose(o As Object, e As EventArgs)
Dim timer = DirectCast(o, Timer)
timer.Stop()
timer.Dispose()
Me.Dispose()
End Sub
[C#]
private void FpSpread1_CellDoubleClick(object sender, FarPoint.Win.Spread.CellClickEventArgs e)
{
object timer = new Timer();
timer.Interval = 350;
timer.Start();
timer.Tick += AsyncClose;
}
public void AsyncClose(object o, EventArgs e)
{
object timer = (Timer)o;
timer.Stop();
timer.Dispose();
this.Dispose();
}
キーワード
MTTK11235