找回密码
 立即注册

QQ登录

只需一步,快速开始

aladdin

中级会员

8

主题

14

帖子

688

积分

中级会员

积分
688

活字格认证

aladdin
中级会员   /  发表于:2013-10-15 18:45  /   查看:4621  /  回复:4
问题1,spdread的keypress事件在spd.EditModePermanent = True的时候就不触发了,求单元格内如何触发keypress事件?

问题2,例如第一列只能全角汉字输入,第二列只能半角数字输入,那么我光标从第一列移动至第二列的时候输入法并没有改变成半角这个时候是输入无效的,如何能不让用户去自己手动改变输入法而自行变更为半角输入法呢?

4 个回复

倒序浏览
aladdin
中级会员   /  发表于:2013-10-16 10:38:00
沙发
问题2已经解决是在每列的属性里可以设置ImeMode
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-10-16 11:25:00
板凳
回复 1楼aladdin的帖子

问题一的原因如下,KeyPress 是挂在 Spread 控件级别上的。如果单元格进入了编辑状态,那现在的焦点处于单元格的编辑器上。
所以,还是建议您通过 http://gcdn.grapecity.com/showtopic-10646.html 3# 中的方法去做。
回复 使用道具 举报
aladdin
中级会员   /  发表于:2013-10-17 09:55:00
地板
回复 3楼iceman的帖子

我要做的操作是在spread的最后一个单元格上点回车,光标能跳到下一个控件上,EditModePermanent = True的时候,点回车既不出发spread的keypress事件也不触发EditorValueChanged 事件。。。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-10-17 14:39:00
5#
回复 4楼aladdin的帖子

aladdin 你好,
可以通过 TextCellType 的 txtType_EditingStopped 事件接受回车事件,判断活跃单元格(有可能是通过鼠标点击切换编辑状态)为编辑单元格。如果是,则切换焦点:
  1. WithEvents txtType As New FarPoint.Win.Spread.CellType.TextCellType
  2.     Dim isCur As Boolean
  3.     Dim activeRow As Int32
  4.     Dim activeCol As Int32
  5.     Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
  6.         Dim rowCount As Int32
  7.         Dim colCount As Int32

  8.         rowCount = Me.FpSpread1.Sheets.Item(0).RowCount
  9.         colCount = Me.FpSpread1.Sheets.Item(0).ColumnCount
  10.         Me.FpSpread1.Sheets.Item(0).Cells(rowCount - 1, colCount - 1).CellType = txtType

  11.         activeRow = 0
  12.         activeCol = 0
  13.         isCur = True
  14.     End Sub

  15.     Private Sub txtType_EditingStopped(sender As Object, e As System.EventArgs) Handles txtType.EditingStopped
  16.         Dim curActiveRow As New Int32
  17.         curActiveRow = Me.FpSpread1.Sheets(0).ActiveRowIndex

  18.         Dim curActiveCol As New Int32
  19.         curActiveCol = Me.FpSpread1.Sheets(0).ActiveColumnIndex

  20.         If ((curActiveCol <> Me.activeCol) OrElse (curActiveRow <> Me.activeRow)) Then
  21.             Me.isCur = False
  22.             Me.activeCol = curActiveCol
  23.             Me.activeRow = curActiveRow
  24.         Else
  25.             Me.isCur = True
  26.         End If
  27.         If Me.isCur Then
  28.             Me.FpSpread2.Focus()
  29.         End If

  30.     End Sub

  31.     Private Sub txtType_EditorValueChanged(sender As Object, e As System.EventArgs) Handles txtType.EditorValueChanged
  32.         activeRow = Me.FpSpread1.Sheets.Item(0).ActiveRowIndex
  33.         activeCol = Me.FpSpread1.Sheets.Item(0).ActiveColumnIndex
  34.     End Sub
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部