yazhenshao 发表于 2023-5-24 20:23:48

checkbox单元格点击第二次不触发cellclick事件

farpoint.win.spread单元格类型设置的是checkbox,点击一下后触发cellclick事件,然后进入编辑状态,然后再次点击时就不触发cellclick事件了。有没有什么方法让其每次点击单元格选择框时都触发?

Richard.Ma 发表于 2023-5-25 18:46:23

没法重现你的问题,checkbox单元格类型并不会进入编辑状态。也是每次都可以触发的。如果你用的是老版本,你可以升级版本测试一下

波波虎 发表于 2023-5-26 22:41:19

你好,我发表下自己的思路昂,不知道对你有没有用。
这种情况通常是由于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事件的效果了。

Richard.Ma 发表于 2023-5-29 09:43:31

楼上提供了重写CheckBoxEditor。可以参考看看是否可以解决问题。无法解决的话,建议还是上传demo上来分析具体原因

yazhenshao 发表于 2023-6-13 08:32:07

非常感谢两位的解答,我是要实现一个复选框列,然后点击复选框时选中,再点击则不选中的需求,最后我还是用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";
                  }
                }
            }
      }

Richard.Ma 发表于 2023-6-13 09:55:21

好的,问题解决就行
页: [1]
查看完整版本: checkbox单元格点击第二次不触发cellclick事件