找回密码
 立即注册

QQ登录

只需一步,快速开始

robynhan

新手上路

1

主题

3

帖子

43

积分

新手上路

积分
43
  • 40

    金币

  • 主题

  • 帖子

最新发帖
robynhan
新手上路   /  发表于:2012-10-29 11:11  /   查看:5376  /  回复:2
我们的要求是在输入Enter键后,光标位置从左到右,从上到下的跳转.
这个控制写在了KeyDown事件内.
在非编辑状态下是起效的
但是,对应Combo类型的Cell,当下拉列表展开时,Enter的效果是收起下拉列表,而不会走到我们的KeyDown事件处理内.
请问如何处理?

2 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-10-29 11:37:00
沙发
Spread for WinForms是通过 InputMap 来控制键盘操作,通过以下代码可以实现ComboBox编辑状态下,按Enter键之后跳转到下一个单元格:
  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             fpSpread1.ActiveSheet.RowCount = 10;
  4.             fpSpread1.ActiveSheet.ColumnCount = 5;

  5.             FarPoint.Win.Spread.CellType.ComboBoxCellType cbct = new FarPoint.Win.Spread.CellType.ComboBoxCellType();
  6.             cbct.Editable = true;
  7.             cbct.Items = new string[] { "AA","BB","CC"};

  8.             fpSpread1.ActiveSheet.Columns[0].CellType = cbct;

  9.             FarPoint.Win.Spread.InputMap im = new FarPoint.Win.Spread.InputMap();

  10.             im = fpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenFocused);
  11.             im.Put(new FarPoint.Win.Spread.Keystroke(Keys.Enter, Keys.None), FarPoint.Win.Spread.SpreadActions.MoveToNextColumnWrap);

  12.             im = fpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused);
  13.             im.Put(new FarPoint.Win.Spread.Keystroke(Keys.Enter, Keys.None), FarPoint.Win.Spread.SpreadActions.MoveToNextColumnWrap);

  14.         }
复制代码
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-10-29 14:55:00
板凳
默认情况下不会触发下拉列表的Enter事件,不过可以指定自己的下拉列表控件,主要是设置ListControl 属性,比如下面的代码:
  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             fpSpread1.ActiveSheet.RowCount = 10;
  4.             fpSpread1.ActiveSheet.ColumnCount = 5;

  5.             FarPoint.Win.Spread.CellType.ComboBoxCellType cmbocell = new FarPoint.Win.Spread.CellType.ComboBoxCellType();

  6.             ListBox list = new ListBox();
  7.             list.Items.AddRange(new Object[] { "One", "Two", "Three" });
  8.             cmbocell.ListControl = list;
  9.             cmbocell.ListControl.KeyDown += new KeyEventHandler(ListControl_KeyDown);

  10.             cmbocell.Items = (new String[] { "One", "Two", "Three" });
  11.             fpSpread1.ActiveSheet.Columns[0].CellType = cmbocell;

  12.         }

  13.         void ListControl_KeyDown(object sender, KeyEventArgs e)
  14.         {
  15.             System.Diagnostics.Debug.WriteLine(e.KeyValue);
  16.         }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部