找回密码
 立即注册

QQ登录

只需一步,快速开始

xaj21

注册会员

7

主题

31

帖子

72

积分

注册会员

积分
72

活字格认证

xaj21
注册会员   /  发表于:2014-4-17 16:28  /   查看:6652  /  回复:5
在CellClick时间中需要将焦点移动到其他控件,比如txtName.Focus(),但是CellClick方法执行结束后,焦点又回到了spread控件,并且触发了Enter获得焦点事件。为了能将焦点顺利移动到txtName,CellClike事件最后加入e.Cancle = true语句,焦点可以顺利移动到txtName,但是Click点中的行的背景色即选中状态等没有变化。
在代码中使用AddSelection方法也没法选中点中的行。使用SetActiveCell的方法?由于现在没有开发环境,求解答!多谢!
PS:spread的OperationMode是SingleSelect

5 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2014-4-17 17:20:00
沙发
回复 1楼xaj21的帖子

xaj21 你好,
请问是希望同时实现 焦点的切换 和 选中当前点击行吧?我通过以下代码实现了:

  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             this.fpSpread1.ActiveSheet.OperationMode = OperationMode.SingleSelect;
  4.         }

  5.         private void fpSpread1_CellClick(object sender, FarPoint.Win.Spread.CellClickEventArgs e)
  6.         {
  7.             e.Cancel = true;
  8.             this.textBox1.Focus();

  9.             this.fpSpread1.ActiveSheet.AddSelection(e.Row,e.Column,1,1);
  10.         }
复制代码


测试 Demo:

12452.zip (51.52 KB, 下载次数: 770)
回复 使用道具 举报
xaj21
注册会员   /  发表于:2014-4-17 21:44:00
板凳
您好,感谢您的回信。自己下午那会重新试了下,已经解决该问题了。
你给的代码中,还少了一句
this.fpSpread1.ActiveSheet.ActiveCell(e.Row,e.Column);
加上这条语句后就完全OK了~
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-4-18 13:53:00
地板
回复 3楼xaj21的帖子

恩 好的 感谢反馈问题结果
回复 使用道具 举报
xaj21
注册会员   /  发表于:2014-4-22 16:30:00
5#
此方法对正常的LeaveCell事件,SelectionChanged事件等都有影响,要根据实际情况进行修正

Private Sub AxvaSpread_Click(sender As Object, e As FarPoint.Win.Spread.CellClickEventArgs) Handles MyBase.CellClick
            Dim _LeaveCellEvent As New _DSpreadEvents_LeaveCellEvent(Me.ActiveRow, Me.ActiveCol, e.Row + 1, e.Column + 1)
            RaiseEvent LeaveCell(sender, _LeaveCellEvent)
            Me.ActiveSheet.SetActiveCell(e.Row, e.Column)
            If Me.ActiveSheet.OperationMode = Spread.OperationMode.SingleSelect Then
                Me.ActiveSheet.AddSelection(e.Row, 0, 1, Me.MaxCols)
            End If
            RaiseEvent SelectionChanged(sender, New FarPoint.Win.Spread.SelectionChangedEventArgs(e.View, New FarPoint.Win.Spread.Model.CellRange(e.Row, e.Column, 1, 1)))
            e.Cancel = True
            RaiseEvent ClickEvent(sender, New _DSpreadEvents_ClickEvent(e.Row + 1, e.Column + 1))
        End Sub
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-4-22 17:18:00
6#
回复 5楼xaj21的帖子

恩 好的 感谢分享延伸问题解决方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部