找回密码
 立即注册

QQ登录

只需一步,快速开始

wangmj

论坛元老

14

主题

44

帖子

1万

积分

论坛元老

积分
10158

活字格认证

wangmj
论坛元老   /  发表于:2013-1-30 10:33  /   查看:18261  /  回复:10
Sample.zip (67.85 KB, 下载次数: 1471)

10 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2013-1-30 19:35:00
沙发
回复 1楼wangmj的帖子

wangmj 你好

是否你的问题和这篇文章中描述的需求有些类似,你先看看是否能够满足你的需求:
自定义键盘中上、下、左、右的事件
回复 使用道具 举报
wangmj
论坛元老   /  发表于:2013-1-31 08:12:00
板凳
dol 你好!
你介绍的那篇文章我看过了,那主要是更改键盘默键的功能的。
我现在的问题是,因为得不到控件的焦点,所以无法响应键盘事件。
如果方便的话,你是否可以看看我写的那个代码,我问题的描述主要是针对 checkbox 的那个选项(当然combbox那个选项也有类似问题)。
拜托了!:Z
回复 使用道具 举报
wangmj
论坛元老   /  发表于:2013-1-31 10:24:00
地板
现在最大的问题是 本来焦点在checbox所在的cell上,但当我按键盘上的[1]的时候,把chechbox的选择状态重新设了一下,这个时候,焦点就没有了。 因此无法再次响应键盘的 keydown事件了  。 如何能把焦点设回来啊 。
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2013-1-31 17:22:00
5#
回复 4楼wangmj的帖子

请参考以下代码:
  1.     public partial class Form1 : Form
  2.     {
  3.         public Form1()
  4.         {
  5.             InitializeComponent();
  6.         }

  7.         private void Form1_Load(object sender, EventArgs e)
  8.         {
  9.             fpSpread1.ActiveSheet.Cells[0, 0].CellType = new CCheckBoxCellType();
  10.         }
  11.     }

  12.     public class CCheckBoxCellType : FarPoint.Win.Spread.CellType.CheckBoxCellType
  13.     {
  14.         public override Control GetEditorControl(Control parent, FarPoint.Win.Spread.Appearance appearance, float zoomFactor)
  15.         {
  16.             var editor = base.GetEditorControl(parent, appearance, zoomFactor);
  17.             editor.KeyDown -= new KeyEventHandler(editor_KeyDown);
  18.             editor.KeyDown += new KeyEventHandler(editor_KeyDown);
  19.             return editor;
  20.         }

  21.         void editor_KeyDown(object sender, KeyEventArgs e)
  22.         {
  23.             if (e.KeyValue == 97)
  24.             {
  25.                 FarPoint.Win.FpCheckBox editor = sender as FarPoint.Win.FpCheckBox;
  26.                 editor.Checked = !editor.Checked;   
  27.             }            
  28.         }
  29.     }
复制代码
回复 使用道具 举报
wangmj
论坛元老   /  发表于:2013-2-1 08:45:00
6#
回复 5楼dof的帖子

谢谢dol 了,checkbox取的焦点的这个问题解决了。
但是现在最大的问题是如果焦点在checbox所在的cell上,当我按键盘上的[1]的时候,用cell的keydown事件,我把chechbox的选择状态重新设了一下。这个时候,cell上的焦点就消失了。 因此无法再次响应cell的 keydown事件 。 如何能把焦点再设回到cell上去啊,我试了各种设置都不好使。但其实焦点应该还在cell上,因为我把窗口最小化,再恢复回来时,焦点就在cell上显示出来了 。
最后一个问题,求帮助阿!
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2013-2-1 16:52:00
7#
回复 6楼wangmj的帖子

wangmj 你好

你能发个例子给我看看嘛,我还不太能理解你现在的问题,主要是什么代码引起的焦点消失。
回复 使用道具 举报
wangmj
论坛元老   /  发表于:2013-2-1 17:11:00
8#

代码

现在的功能是 有两个checkbox, 按1的时候, checbox1 状态发生改变, 按2的时候, checbox2 状态发生改变.
当checkbox1有光标时,按键盘上的1 , 这时 checkbox1状态改变了,同时焦点没有了。 此时, 按键盘上的2 的时候, 没有响应。
因为我用的是cell 的keydown事件来进行处理的,现在cell没有焦点了,所以不响应键盘的2键。

Sample.zip

67.85 KB, 下载次数: 1428

回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2013-2-1 18:29:00
9#
回复 8楼wangmj的帖子

wangmj 你好

我看你使用的是Spread 日文版产品,我这边暂时没有日文版的环境,我使用 Spread .NET 6.0 英文版进行测试,有以下结论:
1、有鼠标点击选中左边的CheckBox,此时按下1和2都不触发KeyDown,因为此时处于编辑状态,无法截获Spread的KeyDown事件,此时会触发CheckBox的KeyDown事件
2、有左右键将焦点单元格移动到左边的CheckBox时,按下1和2会触发KeyDown事件,但是在此按1和2时不触发KeyDown事件,因为此时单元格已经进入编辑状态

不知道日文版是否也是同样的行为,在英文版中我建议你通过截获CheckBox的KeyDown事件来实现该功能。通过截获CheckBox的KeyDown事件可以在SelectionChanged事件中修改Spread的 EditModePermanent 属性:
  1.     Private Sub FpMultiSelect_SelectionChanged(sender As System.Object, e As FarPoint.Win.Spread.SelectionChangedEventArgs) Handles FpMultiSelect.SelectionChanged        
  2.         If TypeOf (FpMultiSelect.ActiveSheet.ActiveCell.CellType) Is FarPoint.Win.Spread.CellType.CheckBoxCellType Then
  3.             FpMultiSelect.EditModePermanent = True
  4.         Else
  5.             FpMultiSelect.EditModePermanent = False
  6.         End If
  7.     End Sub
复制代码
回复 使用道具 举报
wangmj
论坛元老   /  发表于:2013-2-4 09:15:00
10#
谢谢 dof 的回复  。

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部