セルの編集中にコードから該当セルの値を変更すると動作が不定になる
対象製品
SPREAD for Windows Forms 7.0J
詳細
セルの編集中にコードから該当セルの値を変更すると製品の動作が不定になります。このような状況でセルの値を変更する必要がある場合には、【回避方法】のようにセルの編集を終了させてから値の変更を行います。
【現象再現手順】
1.新規のWindowsFormsプロジェクトを作成する
2.フォームにFpSpread1を貼り付け、下記の再現コードを記述する
3.第一行第一列セルのチェックボックスをクリックする
4.表示されたメッセージボックスの"いいえ"を選択する
--- 再度メッセージボックスが選択され、再び"いいえ"を選択すると以降、繰り返しこの現象が発生する
◎再現コード(VB)
◎再現コード(C#)
【回避方法】
値の変更前にセルの編集モードを終了します
◎回避コード(VB)
◎回避コード(C#)
【現象再現手順】
1.新規のWindowsFormsプロジェクトを作成する
2.フォームにFpSpread1を貼り付け、下記の再現コードを記述する
3.第一行第一列セルのチェックボックスをクリックする
4.表示されたメッセージボックスの"いいえ"を選択する
--- 再度メッセージボックスが選択され、再び"いいえ"を選択すると以降、繰り返しこの現象が発生する
◎再現コード(VB)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Text = FpSpread1.ProductVersion
FpSpread1.ActiveSheet.Columns(0).CellType = New FarPoint.Win.Spread.CellType.CheckBoxCellType()
'セルがアクティブになった場合に編集モードがONとなるように設定します
FpSpread1.EditModePermanent = True
End Sub
Private Sub FpSpread1_ButtonClicked(sender As Object, e As FarPoint.Win.Spread.EditorNotifyEventArgs) Handles FpSpread1.ButtonClicked
If e.Column = 0 Then
If MessageBox.Show("test", Application.ProductName, MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.No Then
' セルの値を変更します
Dim sheet As FarPoint.Win.Spread.SheetView = e.View.GetSheetView()
sheet.SetValue(e.Row, e.Column, Not CBool(sheet.GetValue(e.Row, e.Column)))
End If
End If
End Sub
Me.Text = FpSpread1.ProductVersion
FpSpread1.ActiveSheet.Columns(0).CellType = New FarPoint.Win.Spread.CellType.CheckBoxCellType()
'セルがアクティブになった場合に編集モードがONとなるように設定します
FpSpread1.EditModePermanent = True
End Sub
Private Sub FpSpread1_ButtonClicked(sender As Object, e As FarPoint.Win.Spread.EditorNotifyEventArgs) Handles FpSpread1.ButtonClicked
If e.Column = 0 Then
If MessageBox.Show("test", Application.ProductName, MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.No Then
' セルの値を変更します
Dim sheet As FarPoint.Win.Spread.SheetView = e.View.GetSheetView()
sheet.SetValue(e.Row, e.Column, Not CBool(sheet.GetValue(e.Row, e.Column)))
End If
End If
End Sub
◎再現コード(C#)
private void Form1_Load(object sender, EventArgs e)
{
this.Text = fpSpread1.ProductVersion;
fpSpread1.ActiveSheet.Columns[0].CellType = new FarPoint.Win.Spread.CellType.CheckBoxCellType();
//セルがアクティブになった場合に編集モードがONとなるように設定します
fpSpread1.EditModePermanent = true;
}
private void fpSpread1_ButtonClicked(object sender, FarPoint.Win.Spread.EditorNotifyEventArgs e)
{
if (e.Column == 0)
{
if (MessageBox.Show("test", Application.ProductName, MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No)
{
// セルの値を変更します
FarPoint.Win.Spread.SheetView sheet = e.View.GetSheetView();
sheet.SetValue(e.Row, e.Column, !Convert.ToBoolean(sheet.GetValue(e.Row, e.Column)));
}
}
}
{
this.Text = fpSpread1.ProductVersion;
fpSpread1.ActiveSheet.Columns[0].CellType = new FarPoint.Win.Spread.CellType.CheckBoxCellType();
//セルがアクティブになった場合に編集モードがONとなるように設定します
fpSpread1.EditModePermanent = true;
}
private void fpSpread1_ButtonClicked(object sender, FarPoint.Win.Spread.EditorNotifyEventArgs e)
{
if (e.Column == 0)
{
if (MessageBox.Show("test", Application.ProductName, MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No)
{
// セルの値を変更します
FarPoint.Win.Spread.SheetView sheet = e.View.GetSheetView();
sheet.SetValue(e.Row, e.Column, !Convert.ToBoolean(sheet.GetValue(e.Row, e.Column)));
}
}
}
【回避方法】
値の変更前にセルの編集モードを終了します
◎回避コード(VB)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Text = FpSpread1.ProductVersion
FpSpread1.ActiveSheet.Columns(0).CellType = New FarPoint.Win.Spread.CellType.CheckBoxCellType()
'セルがアクティブになった場合に編集モードがONとなるように設定します
FpSpread1.EditModePermanent = True
End Sub
Private Sub FpSpread1_ButtonClicked(sender As Object, e As FarPoint.Win.Spread.EditorNotifyEventArgs) Handles FpSpread1.ButtonClicked
If e.Column = 0 Then
If MessageBox.Show("test", Application.ProductName, MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.No Then
' 【回避コード】編集状態を終了します
FpSpread1.StopCellEditing()
' セルの値を変更します
Dim sheet As FarPoint.Win.Spread.SheetView = e.View.GetSheetView()
sheet.SetValue(e.Row, e.Column, Not CBool(sheet.GetValue(e.Row, e.Column)))
End If
End If
End Sub
Me.Text = FpSpread1.ProductVersion
FpSpread1.ActiveSheet.Columns(0).CellType = New FarPoint.Win.Spread.CellType.CheckBoxCellType()
'セルがアクティブになった場合に編集モードがONとなるように設定します
FpSpread1.EditModePermanent = True
End Sub
Private Sub FpSpread1_ButtonClicked(sender As Object, e As FarPoint.Win.Spread.EditorNotifyEventArgs) Handles FpSpread1.ButtonClicked
If e.Column = 0 Then
If MessageBox.Show("test", Application.ProductName, MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.No Then
' 【回避コード】編集状態を終了します
FpSpread1.StopCellEditing()
' セルの値を変更します
Dim sheet As FarPoint.Win.Spread.SheetView = e.View.GetSheetView()
sheet.SetValue(e.Row, e.Column, Not CBool(sheet.GetValue(e.Row, e.Column)))
End If
End If
End Sub
◎回避コード(C#)
private void Form1_Load(object sender, EventArgs e)
{
this.Text = fpSpread1.ProductVersion;
fpSpread1.ActiveSheet.Columns[0].CellType = new FarPoint.Win.Spread.CellType.CheckBoxCellType();
//セルがアクティブになった場合に編集モードがONとなるように設定します
fpSpread1.EditModePermanent = true;
}
private void fpSpread1_ButtonClicked(object sender, FarPoint.Win.Spread.EditorNotifyEventArgs e)
{
if (e.Column == 0)
{
if (MessageBox.Show("test", Application.ProductName, MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No)
{
// セルの値を変更します
fpSpread1.StopCellEditing();
// セルの値を変更します
FarPoint.Win.Spread.SheetView sheet = e.View.GetSheetView();
sheet.SetValue(e.Row, e.Column, !Convert.ToBoolean(sheet.GetValue(e.Row, e.Column)));
}
}
}
{
this.Text = fpSpread1.ProductVersion;
fpSpread1.ActiveSheet.Columns[0].CellType = new FarPoint.Win.Spread.CellType.CheckBoxCellType();
//セルがアクティブになった場合に編集モードがONとなるように設定します
fpSpread1.EditModePermanent = true;
}
private void fpSpread1_ButtonClicked(object sender, FarPoint.Win.Spread.EditorNotifyEventArgs e)
{
if (e.Column == 0)
{
if (MessageBox.Show("test", Application.ProductName, MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No)
{
// セルの値を変更します
fpSpread1.StopCellEditing();
// セルの値を変更します
FarPoint.Win.Spread.SheetView sheet = e.View.GetSheetView();
sheet.SetValue(e.Row, e.Column, !Convert.ToBoolean(sheet.GetValue(e.Row, e.Column)));
}
}
}