找回密码
 立即注册

QQ登录

只需一步,快速开始

kinglee6446

中级会员

10

主题

18

帖子

988

积分

中级会员

积分
988

活字格认证

[已处理] spread焦点

kinglee6446
中级会员   /  发表于:2013-10-22 10:06  /   查看:8022  /  回复:7
我做了一个toolbar(dll),放在spread下面,点左右键焦点所在的单元格会上下变动(SetActiveCell(e.Row, e.Column))。现在我需要再点击左右键的时候,触发某个spread事件,来完成某些功能(数值计算+DB更新),不知道能触发什么事件,求助下。

7 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2013-10-22 14:01:00
沙发
回复 1楼kinglee6446的帖子

左右键指的是键盘按键吗?可以尝试使用 Spread 下 LeaveCell 监听。
回复 使用道具 举报
kinglee6446
中级会员   /  发表于:2013-10-23 09:25:00
板凳
1、左右键不是键盘按钮,就是两个button,用于设置焦点:MySpread.ActiveSheet.SetActiveCell(rowNum, columnNum))。
2、我尝试使用spread的各种事件,包括LeaveCell,EnterCell等都不会被触发,发现只有Paint系列的事件可能被触发,但是Paint不合适。
发现只有Paint系列的事件可能被触发,但是这几个事件不合适,Spread不滚动的话,不会被触发。
3、我用SetActiveCell,获得焦点的cell并没有进入编辑状态,没有光标闪烁。是不是这个原因,才使得EnterCell没有被触发呢?我已经设置【spr_listViw.EditModePermanent = True】了。
4、像这种SetActiveCell,在代码里的动作能触发Spread的事件么?
  我是新手,对Spread和VB.Net不太懂,希望多多指教。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-10-23 10:55:00
地板
回复 3楼kinglee6446的帖子

你可以尝试使用 fpSpread1_EditModeOn 事件来截获SetActiveCell动作。在我这边测试没问题。

  1. public Form1()
  2.         {
  3.             InitializeComponent();
  4.             this.fpSpread1.EditModeOn += new EventHandler(fpSpread1_EditModeOn);
  5.             this.fpSpread1.EditModePermanent = true;
  6.         }
  7.         void fpSpread1_EditModeOn(object sender, EventArgs e)
  8.         {
  9.         }
  10.         private void rightToolStripMenuItem_Click(object sender, EventArgs e)
  11.         {
  12.             this.fpSpread1.Sheets[0].SetActiveCell(this.fpSpread1.Sheets[0].ActiveRowIndex + 1, 0);
  13.         }
复制代码
回复 使用道具 举报
kinglee6446
中级会员   /  发表于:2013-10-24 09:35:00
5#
回复 4楼iceman的帖子

我试了下你的方法,是可行的,但是我有一个疑问,就是为什么LeaveCell为什么不行呢,只有EditModeOn可以呢。我用的是VB.net。请指教。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-10-24 11:45:00
6#
回复 5楼kinglee6446的帖子

kinglee6446 你好,

通过后台代码操作,是否触发某个事件,这是 Spread 内部机制决定的。可能是 Spread 把 LeaveCell 事件作为 UI 事件处理的, SetActiveCell 没有调用这个事件。
回复 使用道具 举报
kinglee6446
中级会员   /  发表于:2013-10-25 10:44:00
7#
回复 6楼iceman的帖子

我想再请教一个问题,我现在实装了EditModeOn和EditModeOff两个事件方法,但是这两个方法好像一直在循环执行,cell无法获得光标,如果我只实装其中一个的话没有问题。这是什么原因呢?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-10-25 13:10:00
8#
回复 7楼kinglee6446的帖子

编辑单元格就会触发 EditModeOn 事件,编辑结束就会触发 EditModeOff 事件。
EditModePermanent = True 时,移动就会持续触发这两个事件。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部