找回密码
 立即注册

QQ登录

只需一步,快速开始

liuwei19840201

中级会员

28

主题

67

帖子

504

积分

中级会员

积分
504

微信认证勋章

liuwei19840201
中级会员   /  发表于:2018-5-24 16:26  /   查看:3114  /  回复:5
Spread版本 Spread 10 for winform
现象:
        Spread有1行2列,其中 A 单元格 Locked=False, B单元格Locked = True ,在Change事件中, 追加B单元格 Locked = False的处理。
        当在A单元格输入内容后, 点击 B单元格出发Change事件,之后发现,光标仍然落在A单元格。

        ※疑问:虽然在Change事件中, B单元格 Locked = False的处理被执行了,光标却无法选中B单元格。
                     发生光标仍然落在A单元格后,再次点击B单元格,则B单元格可以被选中,并进入编辑状态。

期望结果:
        需求,当A单元格输入特定内容(如:1)后,关标自动落入B单元格并进入编辑状态。
        需求,当A单元格输入特定内容以外的场合(如:2),B单元格处于锁定状态,无法选中。

Spread设定如下,
1.     两列 1 行
2.     A列Locked=False,B列Locked=True
3.     Spread.SelectionBlockOptions = FarPoint.Win.Spread.SelectionBlockOptions.None
4.     Spread.EditModePermanent = True
5.     Change事件中代码如下
        Private Sub FpSpread2_Change(sender As Object, e As FarPoint.Win.Spread.ChangeEventArgs) Handles FpSpread2.Change
            If FpSpread2.ActiveSheet.Cells(0, 0).Text = "1" Then
                FpSpread2.ActiveSheet.Cells(0, 1).Locked = False
            Else
                FpSpread2.ActiveSheet.Cells(0, 1).Locked = True
            End If
        End Sub

附件中是测试代码,Form 画面,内含1个Spread



SampleApp.zip

3.5 KB, 下载次数: 67

5 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-5-24 18:14:50
沙发
CellClick事件里面做,change的时候时机不对
回复 使用道具 举报
liuwei19840201
中级会员   /  发表于:2018-6-4 10:05:17
板凳
CellClick事件里面做做的话,如果回车键按下,能触发值改变,但无法出发CellClick事件,现在的处理方式是,在KeyDown事件中,调用CellClick。请问是否还有别的方式。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-6-4 18:34:03
地板
可以不用EditModePermanent ,其他事件结合做

  1.         private void FpSpread1_EnterCell(object sender, FarPoint.Win.Spread.EnterCellEventArgs e)
  2.         {
  3.             fpSpread1.EditMode = true;
  4.         }

  5.         private void FpSpread1_LeaveCell(object sender, FarPoint.Win.Spread.LeaveCellEventArgs e)
  6.         {

  7.             if (fpSpread1.ActiveSheet.Cells[0, 0].Text == "1")
  8.                 fpSpread1.ActiveSheet.Cells[0, 1].Locked = false;
  9.             else
  10.                 fpSpread1.ActiveSheet.Cells[0, 1].Locked = true;

  11.             if (fpSpread1.ActiveSheet.Cells[e.NewRow, e.NewColumn].Locked)
  12.             {
  13.                 e.Cancel = true;
  14.                 fpSpread1.EditMode = true;
  15.             }
  16.         }
复制代码
回复 使用道具 举报
liuwei19840201
中级会员   /  发表于:2018-6-5 09:09:45
5#
好的非常感谢
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-6-5 11:48:13
6#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部