找回密码
 立即注册

QQ登录

只需一步,快速开始

yin_tb

高级会员

53

主题

199

帖子

1018

积分

高级会员

积分
1018

微信认证勋章

yin_tb
高级会员   /  发表于:2021-10-16 13:01  /   查看:2035  /  回复:3
1金币
本帖最后由 yin_tb 于 2021-10-16 16:14 编辑

引用这个贴子:【新提醒】关于屏蔽down 向下箭头的问题 - Spread.NET专区 - WinForms 求助中心 - 葡萄城产品技术社区 (grapecity.com.cn)
需求是:界面中,有个Spread和一个TrueDbGrid,我希望的是,在Spread某个单格中编辑时,TrueDbGrid自动按输入内容过滤(用网格下拉呈现的内容全面,比combox方式要好),这个没问题。
问题是,我想在Spread的单元格中按keys.down键时,焦点能移到TrueDbGrid(为了在项目中操作方便,客户过滤出数据可以即时选择)。
用上面贴子的代码,经测试,当Spread的单元格没有光标闪时,是可以的,但有光标闪时,无效,也就是说,
贴子中:
  • im = fpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused);
  •         im.Put(new FarPoint.Win.Spread.Keystroke(Keys.Down, Keys.None), FarPoint.Win.Spread.SpreadActions.None);

这两行,没作用,比如单元格中是12345这几个数字,光标在1前面时,按down键,光标就到了5后面了,也不给TrueDbGrid焦点(这时光标的移动可能是windows的原因)。


也就是说:下面的事件,只有单元格中没有光标时才执行,为何?怎么解决呢。
  • private void fpSpread1_KeyDown(object sender, KeyEventArgs e)
  •     {
  •     if e.keycode==keys.down
  •         TrueDbGrid.focus();
  •     }


最佳答案

查看完整内容

已解决,搞了一天,知道葡萄城休班,想等回复。结果解决了,自问自答了个问题,也给大家分享下。 最终发现,列的数据类型会影响按键。因为我用这个DEMO又试,我原来都是输入数字,输入字母效果一样。 无意间,当我输入汉字时,怎么都不行,down键直接不工作。 于是,我突发奇想的,把列设为TextCellType类型,结果是,我上面反映的问题都没有了。不管双击单元格与否,不管单元格是否有内容,down键,都可以处理焦点的转移。 此 ...

3 个回复

倒序浏览
最佳答案
最佳答案
yin_tb
高级会员   /  发表于:2021-10-16 13:01:39
来自 3#
已解决,搞了一天,知道葡萄城休班,想等回复。结果解决了,自问自答了个问题,也给大家分享下。
最终发现,列的数据类型会影响按键。因为我用这个DEMO又试,我原来都是输入数字,输入字母效果一样。
无意间,当我输入汉字时,怎么都不行,down键直接不工作。
于是,我突发奇想的,把列设为TextCellType类型,结果是,我上面反映的问题都没有了。不管双击单元格与否,不管单元格是否有内容,down键,都可以处理焦点的转移。
此问题,我觉得对up,down,left,right这几个方向键影响最大,
也就是说,在单元格在有光标的编辑状态时,你想屏蔽原来键的处理功能,然后自定义键的功能,单元格类型会有影响。
另外,汉字是双字节,字母和数字是单字节,是否有影响,这底层的东西,我没去想。
另外,当不改变单元格类型,输入全角的英文或字母会如何,我也没试。当遇到问题的伙伴看到可以去试。
看来,遇到问题要有想像力呀。

评分

参与人数 1金币 +200 收起 理由
Richard.Ma + 200 很给力!

查看全部评分

回复 使用道具 举报
yin_tb
高级会员   /  发表于:2021-10-16 17:48:13
2#
本帖最后由 yin_tb 于 2021-10-16 17:53 编辑

我又参考了帖子:https://gcdn.grapecity.com.cn/showtopic-4107-1-1.html
但我没明白他弄click事件干嘛。
void fpSpread1_EditModeOn(object sender, EventArgs e)
        {
            FarPoint.Win.Spread.CellType.GeneralEditor tx = this.fpSpread1.EditingControl as FarPoint.Win.Spread.CellType.GeneralEditor;
            tx.Click += new EventHandler(tx_Click);
            tx.MouseDown += new MouseEventHandler(tx_MouseDown);
        }
我参考它,做了个Demo,您可以试下。
1、当你不对单元格做任何编辑时,按down键,ListBox控件L1是可以获得焦点的。
2、即使你对单元格编辑,单元格中有光标,ListBox控件L1是可以获得焦点的。
     只要你不双击单元格,就可以。
问题: 执行以下顺序,呈现问题:
1、不要双击单元格,找一个空白单元格,输入123456,按down键,此时, L1 获得焦点。
2、双击你输入123456的单元格,再按down键,不行了。
注:上面完成1后,焦点在L1,你不双击123456的单元格,只是点一下,让Spread有焦点,
       再输入45678(因为它是自动覆盖原字符的), 接着按down键,可以。
总结:单元格没字符时,怎么双击出现光标,按down都可以,但有字符时,按down操作,不可以,为什么。
请用DEMO测试

spread问题.zip

111.48 KB, 下载次数: 76

回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-10-18 09:48:18
4#
,问题解决了就好,谢谢分享解决办法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部