コンボボックス型セルのドロップダウンリストでキー入力で選択したとき、選択インデックスが不正になる
対象製品
El Tabelle for .NET
発生環境
この現象は次のファイル バージョンのアセンブリで発生します。
v1.2.2003.0630
v1.2.2003.0724
v1.2.2003.0829
v1.2.2003.0902 (HotFix)
v1.2.2003.0911 (HotFix)
v1.2.2003.1103 (HotFix)
v1.2.2003.1128
v1.2.2003.0630
v1.2.2003.0724
v1.2.2003.0829
v1.2.2003.0902 (HotFix)
v1.2.2003.0911 (HotFix)
v1.2.2003.1103 (HotFix)
v1.2.2003.1128
状況
修正済み
詳細
コンボボックス型セルのドロップダウンリストでキー入力によってアイテムを選択したとき、選択インデックスの情報が更新されず、ドロップダウンリストにない値が入力されたものとみなされてしまいます。
再現手順:
1.コンボボックス型セルを作成する。
[Visual Basic]
Dim objComboBoxEditor As New GrapeCity.Win.Editors.ComboBoxEditor
objComboBoxEditor.Editable = False
objComboBoxEditor.Items.Add("0:AAA")
objComboBoxEditor.Items.Add("1:BBB")
objComboBoxEditor.Items.Add("2:CCC")
objComboBoxEditor.Items.Add("3:DDD")
Sheet1(0, 0).Editor = objComboBoxEditor
[C#]
GrapeCity.Win.Editors.ComboBoxEditor objComboBoxEditor;
objComboBoxEditor = new GrapeCity.Win.Editors.ComboBoxEditor();
objComboBoxEditor.Editable = false;
objComboBoxEditor.Items.Add("0:AAA");
objComboBoxEditor.Items.Add("1:BBB");
objComboBoxEditor.Items.Add("2:CCC");
objComboBoxEditor.Items.Add("3:DDD");
sheet1[0, 0].Editor = objComboBoxEditor;
2.[Enter] キーを入力し、セルの編集を開始する。
キー操作、またはマウス操作でドロップダウンリストを表示する
3.数値キーを押し(例: '2')、ドロップダウンリストからアイテムを選択する。
4.[Tab] キーを押し、強制的に編集を確定・次のセルに移動する。
以上の操作で、コンボボックス型セルのインデックスの値は-1 となってしまいます。期待される正しい値は 2 です。
[Visual Basic]
Debug.WriteLine(Sheet1.ActiveCell.Value)
[C#]
System.Diagnostics.Debug.WriteLine(
sheet1.ActiveCell.Value.ToString());
・この現象は、[Tab] キーによる編集確定だけでなくショートカットキーによる編集の確定でも発生します。
再現手順:
1.コンボボックス型セルを作成する。
[Visual Basic]
Dim objComboBoxEditor As New GrapeCity.Win.Editors.ComboBoxEditor
objComboBoxEditor.Editable = False
objComboBoxEditor.Items.Add("0:AAA")
objComboBoxEditor.Items.Add("1:BBB")
objComboBoxEditor.Items.Add("2:CCC")
objComboBoxEditor.Items.Add("3:DDD")
Sheet1(0, 0).Editor = objComboBoxEditor
[C#]
GrapeCity.Win.Editors.ComboBoxEditor objComboBoxEditor;
objComboBoxEditor = new GrapeCity.Win.Editors.ComboBoxEditor();
objComboBoxEditor.Editable = false;
objComboBoxEditor.Items.Add("0:AAA");
objComboBoxEditor.Items.Add("1:BBB");
objComboBoxEditor.Items.Add("2:CCC");
objComboBoxEditor.Items.Add("3:DDD");
sheet1[0, 0].Editor = objComboBoxEditor;
2.[Enter] キーを入力し、セルの編集を開始する。
キー操作、またはマウス操作でドロップダウンリストを表示する
3.数値キーを押し(例: '2')、ドロップダウンリストからアイテムを選択する。
4.[Tab] キーを押し、強制的に編集を確定・次のセルに移動する。
以上の操作で、コンボボックス型セルのインデックスの値は-1 となってしまいます。期待される正しい値は 2 です。
[Visual Basic]
Debug.WriteLine(Sheet1.ActiveCell.Value)
[C#]
System.Diagnostics.Debug.WriteLine(
sheet1.ActiveCell.Value.ToString());
・この現象は、[Tab] キーによる編集確定だけでなくショートカットキーによる編集の確定でも発生します。
回避方法
この現象はファイル バージョン v1.2.2004.0224 (HotFix) 以降のアセンブリで修正されています。
修正版は こちら からダウンロードできます。
問題が修正されたアセンブリに移行するか、次の操作を行うことで現象を回避できます。
・CellNotify イベントで選択インデックスを更新する。
[Visual Basic]
Private Sub Sheet1_CellNotify(ByVal sender As Object, _
ByVal e As GrapeCity.Views.ElTabelle.CellNotifyEventArgs) _
Handles Sheet1.CellNotify
Select Case e.Name
Case "SelectedIndexChanged"
'選択している項目が変更された時の処理です
Dim objComboBoxEditor As GrapeCity.Win.Editors.ComboBoxEditor = _
CType(Sheet1.ActiveCell.Editor, GrapeCity.Win.Editors.ComboBoxEditor)
Dim iCount As Integer = 0
For Each strItem As String In objComboBoxEditor.Items
If Sheet1.ActiveCell.Text = strItem Then
Sheet1.ActiveCell.Value = iCount
End If
iCount = iCount + 1
Next
End Select
End Sub
[C#]
private void sheet1_CellNotify(object sender,
GrapeCity.Views.ElTabelle.CellNotifyEventArgs e)
{
switch(e.Name)
{
case "SelectedIndexChanged":
//選択している項目が変更された時の処理です
GrapeCity.Win.Editors.ComboBoxEditor objComboBoxEditor;
objComboBoxEditor =
(GrapeCity.Win.Editors.ComboBoxEditor)sheet1.ActiveCell.Editor;
int iCount = 0;
foreach(string strItem in objComboBoxEditor.Items)
{
if(sheet1.ActiveCell.Text == strItem)
{
sheet1.ActiveCell.Value = iCount;
}
iCount = iCount + 1;
}
break;
}
}
修正版は こちら からダウンロードできます。
問題が修正されたアセンブリに移行するか、次の操作を行うことで現象を回避できます。
・CellNotify イベントで選択インデックスを更新する。
[Visual Basic]
Private Sub Sheet1_CellNotify(ByVal sender As Object, _
ByVal e As GrapeCity.Views.ElTabelle.CellNotifyEventArgs) _
Handles Sheet1.CellNotify
Select Case e.Name
Case "SelectedIndexChanged"
'選択している項目が変更された時の処理です
Dim objComboBoxEditor As GrapeCity.Win.Editors.ComboBoxEditor = _
CType(Sheet1.ActiveCell.Editor, GrapeCity.Win.Editors.ComboBoxEditor)
Dim iCount As Integer = 0
For Each strItem As String In objComboBoxEditor.Items
If Sheet1.ActiveCell.Text = strItem Then
Sheet1.ActiveCell.Value = iCount
End If
iCount = iCount + 1
Next
End Select
End Sub
[C#]
private void sheet1_CellNotify(object sender,
GrapeCity.Views.ElTabelle.CellNotifyEventArgs e)
{
switch(e.Name)
{
case "SelectedIndexChanged":
//選択している項目が変更された時の処理です
GrapeCity.Win.Editors.ComboBoxEditor objComboBoxEditor;
objComboBoxEditor =
(GrapeCity.Win.Editors.ComboBoxEditor)sheet1.ActiveCell.Editor;
int iCount = 0;
foreach(string strItem in objComboBoxEditor.Items)
{
if(sheet1.ActiveCell.Text == strItem)
{
sheet1.ActiveCell.Value = iCount;
}
iCount = iCount + 1;
}
break;
}
}
キーワード
ELTB03596
この文書は、以前は次のバグレポートIDで公開されていました : 3855