CellContentClickイベントで現在の行を削除すると例外が発生する場合がある
対象製品
MultiRow for Windows Forms 5.0J
発生環境
v5.0.2008.0430
状況
修正済み
詳細
GcMultiRow.CellContentClick イベントで現在の行を削除するとき、現在のセルがインスタンス化されていると、NullReferenceException が発生します。たとえば、次のようなケースがあります。
・テンプレートに ButtonCell を配置し、実行時にそのボタンのスタイルを変更している。
・テンプレートに ButtonCell を配置し、実行時にそのボタンのスタイルを変更している。
回避方法
この現象は、MultiRow for Windows Forms 5.0J Service Pack 1 (v5.0.2008.0930)および以降の修正版で修正されています。最新のService Packのダウンロードはこちら 。
または、次のいずれかの方法でこの現象を回避できます。
・GcMultiRow.CellContentClick イベントの代わりに GcMultiRow.CellMouseClick イベントを使用する。
[Visual Basic]
Imports GrapeCity.Win.MultiRow
Private Sub GcMultiRow1_CellMouseClick(ByVal sender As System.Object, ByVal e As CellMouseEventArgs) Handles GcMultiRow1.CellMouseClick
If e.Scope = CellScope.Row Then
If e.CellIndex = 0 Then
GcMultiRow1.Rows.Remove(GcMultiRow1.CurrentRow)
End If
End If
End Sub
[C#]
using GrapeCity.Win.MultiRow;
private void gcMultiRow1_CellMouseClick(object sender, CellMouseEventArgs e)
{
if (e.Scope == CellScope.Row)
{
if (e.CellIndex == 0)
{
gcMultiRow1.Rows.Remove(gcMultiRow1.CurrentRow);
}
}
}
・可能な場合、セルのインスタンス化を避ける。
たとえば、セルのスタイルや値をテンプレートで設定する場合はこの現象は発生しません。
または、次のいずれかの方法でこの現象を回避できます。
・GcMultiRow.CellContentClick イベントの代わりに GcMultiRow.CellMouseClick イベントを使用する。
[Visual Basic]
Imports GrapeCity.Win.MultiRow
Private Sub GcMultiRow1_CellMouseClick(ByVal sender As System.Object, ByVal e As CellMouseEventArgs) Handles GcMultiRow1.CellMouseClick
If e.Scope = CellScope.Row Then
If e.CellIndex = 0 Then
GcMultiRow1.Rows.Remove(GcMultiRow1.CurrentRow)
End If
End If
End Sub
[C#]
using GrapeCity.Win.MultiRow;
private void gcMultiRow1_CellMouseClick(object sender, CellMouseEventArgs e)
{
if (e.Scope == CellScope.Row)
{
if (e.CellIndex == 0)
{
gcMultiRow1.Rows.Remove(gcMultiRow1.CurrentRow);
}
}
}
・可能な場合、セルのインスタンス化を避ける。
たとえば、セルのスタイルや値をテンプレートで設定する場合はこの現象は発生しません。
キーワード
MLTR06993
この文書は、以前は次のバグレポートIDで公開されていました : 7648