コンボボックス型セルを使用し CellNotify イベントで編集終了を設定すると、StackOverflowException が発生する場合がある。
対象製品
El Tabelle for .NET 3.0J
発生環境
この現象は、次のファイルバージョンのアセンブリで発生します。
v3.2.2006.0720 および以前のアセンブリ
v3.2.2006.0720 および以前のアセンブリ
状況
修正済み
詳細
コンボボックス型セルを使用し CellNotify の Drop Close イベントで、Sheet.EditState プロパティをfalse に設定(MultiRowSheetの場合は、KeyActionにEditStateを設定)すると StackOverflowException が発生します。
例えば、次に示すコーディングを実施し、「ドロップダウンリストを選択したときに編集を確定する」 ことを実現したい場合に、本現象が発生します。
Sheetの場合:
[Visual Basic]
Select Case e.Name
Case DropClose
Sheet1.EditState = False
End Select
[C#]
switch(e.Name.ToString())
{
case "DropClose":
sheet1.EditState = false;
break;
}
MultiRowSheetの場合:
[Visual Basic]
Select Case e.Name
Case DropClose
MultiRowSheet1.KeyAction(MKeyAction.EndEdit)
End Select
[C#]
switch(e.Name.ToString())
{
case "DropClose":
multiRowSheet1.KeyAction(MKeyAction.EndEdit);
break;
}
例えば、次に示すコーディングを実施し、「ドロップダウンリストを選択したときに編集を確定する」 ことを実現したい場合に、本現象が発生します。
Sheetの場合:
[Visual Basic]
Select Case e.Name
Case DropClose
Sheet1.EditState = False
End Select
[C#]
switch(e.Name.ToString())
{
case "DropClose":
sheet1.EditState = false;
break;
}
MultiRowSheetの場合:
[Visual Basic]
Select Case e.Name
Case DropClose
MultiRowSheet1.KeyAction(MKeyAction.EndEdit)
End Select
[C#]
switch(e.Name.ToString())
{
case "DropClose":
multiRowSheet1.KeyAction(MKeyAction.EndEdit);
break;
}
回避方法
この現象は、ファイル バージョン v3.2.2006.0915 以降のアセンブリで修正されています。
修正版は こちら からダウンロードできます。
但し、ファイル バージョン v3.2.2006.0915 以降のアセンブリで、本現象が発生する目的の処理は実現できません。 例外発生のみ抑止しております。 本現象が発生する目的の処理を実現させたい場合は、次のどちらかの回避策を適用してください。
1. 拡張コンボボックス型セルを使用する。
2. "SelectedIndexChanged"イベントでKeyActionをEndEditに変更する。
Sheetの場合:
[Visual Basic]
Select Case e.Name
Case SelectedIndexChanged
Sheet1.KeyAction(KeyAction.EndEdit)
End Select
[C#]
switch (e.Name.ToString())
{
case "SelectedIndexChanged":
sheet1.KeyAction(KeyAction.EndEdit);
break;
}
MultiRowSheetの場合:
[Visual Basic]
Select Case e.Name
Case SelectedIndexChanged
MultiRowSheet1.KeyAction(MKeyAction.EndEdit)
End Select
[C#]
switch(e.Name.ToString())
{
case "SelectedIndexChanged":
multiRowSheet1.KeyAction(MKeyAction.EndEdit);
break;
}
修正版は こちら からダウンロードできます。
但し、ファイル バージョン v3.2.2006.0915 以降のアセンブリで、本現象が発生する目的の処理は実現できません。 例外発生のみ抑止しております。 本現象が発生する目的の処理を実現させたい場合は、次のどちらかの回避策を適用してください。
1. 拡張コンボボックス型セルを使用する。
2. "SelectedIndexChanged"イベントでKeyActionをEndEditに変更する。
Sheetの場合:
[Visual Basic]
Select Case e.Name
Case SelectedIndexChanged
Sheet1.KeyAction(KeyAction.EndEdit)
End Select
[C#]
switch (e.Name.ToString())
{
case "SelectedIndexChanged":
sheet1.KeyAction(KeyAction.EndEdit);
break;
}
MultiRowSheetの場合:
[Visual Basic]
Select Case e.Name
Case SelectedIndexChanged
MultiRowSheet1.KeyAction(MKeyAction.EndEdit)
End Select
[C#]
switch(e.Name.ToString())
{
case "SelectedIndexChanged":
multiRowSheet1.KeyAction(MKeyAction.EndEdit);
break;
}
キーワード
ELTB05646
この文書は、以前は次のバグレポートIDで公開されていました : 6433