checkbox单元格点击第二次不触发cellclick事件
farpoint.win.spread单元格类型设置的是checkbox,点击一下后触发cellclick事件,然后进入编辑状态,然后再次点击时就不触发cellclick事件了。有没有什么方法让其每次点击单元格选择框时都触发?没法重现你的问题,checkbox单元格类型并不会进入编辑状态。也是每次都可以触发的。如果你用的是老版本,你可以升级版本测试一下 你好,我发表下自己的思路昂,不知道对你有没有用。
这种情况通常是由于checkbox编辑状态与cellclick事件的触发机制所致。在Farpoint.win.spread中,checkbox的编辑状态与双击单元格时的编辑状态是不同的,点击checkbox时虽然也会进入编辑状态,但是并不会触发cellclick事件。
如果想要每次点击checkbox都触发cellclick事件,可以通过重写编辑器的EnterMode方法来实现。具体步骤如下:
1. 继承Farpoint.win.spread.editors.CheckBoxEditor类,重写EnterMode方法。
例如,新增一个名为MyCheckBoxEditor的类,代码如下:
public class MyCheckBoxEditor : Farpoint.Win.Spread.Editors.CheckBoxEditor
{
public override void EnterMode()
{
base.EnterMode();
this.EditingControl.Click += EditingControl_Click;
}
private void EditingControl_Click(object sender, EventArgs e)
{
this.EditingControl.Click -= EditingControl_Click;
this.OnCellClick(new FarPoint.Win.Spread.CellClickEventArgs(this.Row, this.Column));
}
}
2. 在需要使用的地方,将该编辑器分配给对应的列。
例如,将列0的单元格类型设置为checkbox,并将其编辑器设置为MyCheckBoxEditor,代码如下:
fpSpread1.Sheets.Columns.CellType = new FarPoint.Win.Spread.CellType.CheckBoxCellType();
fpSpread1.Sheets.Columns.Editor = new MyCheckBoxEditor();
这样就可以实现每次点击checkbox都触发cellclick事件的效果了。 楼上提供了重写CheckBoxEditor。可以参考看看是否可以解决问题。无法解决的话,建议还是上传demo上来分析具体原因 非常感谢两位的解答,我是要实现一个复选框列,然后点击复选框时选中,再点击则不选中的需求,最后我还是用fpMain_CellClick实现了,以下代码可以满足我的要求。等有空我再试试二楼提供的重写方法,非常感谢:D
private void fpMain_CellClick(object sender, FarPoint.Win.Spread.CellClickEventArgs e)
{
if (e.Column == 0)
{
if (!e.ColumnHeader)
{
if (fpMain.Sheets.Cells.Text == "0")
{
bool allCheck = true;
fpMain.Sheets.Cells.Text = "1";
for (int i = 0; i < fpMain.Sheets.RowCount; i++)
{
if (fpMain.Sheets.Cells.Text == "0")
{
allCheck = false;
break;
}
}
if (allCheck)
{
fpMain.Sheets.ColumnHeader.Cells.Text = "1";
}
}
else
{
fpMain.Sheets.Cells.Text = "0";
}
}
}
} 好的,问题解决就行
页:
[1]