GPCT 发表于 2014-6-11 11:01:00

Multirow6.0 的Popupcell如何响应KeyPress事件

在Template里面放了一个PopupCell,用户不仅期望可以通过右方的按钮弹出参照,还期望通过输入框中输入空格也能弹出参照。
另外,用户期望可以通过Enterkey来触发popupCell之间的切换,类似于上下左右键的功能。

请问有没有可能?

我做过的尝试:
首先响应EditingControlShowing事件,拿到PopupEditingControl 。
然后响应这个Control的KeyPress事件,处理Space和Enter两个按键的业务。
但是我发现第二步中触发不了KeyPress事件。

   If TypeOf e.Control Is MultiRow.PopupEditingControl Then
            Dim A As MultiRow.PopupEditingControl = CType(e.Control, MultiRow.PopupEditingControl)
            RemoveHandler A.KeyPress, AddressOf PopKeyPress
            AddHandler A.KeyPress, AddressOf PopKeyPress
   EndIf

另外,我发现Multirow已经使用过了EnterKey,用来在一个Cell里面切换输入和一览这种状态,不知是否能屏蔽此功能?

以上三个问题,拜托了。
谢谢~

dafo 发表于 2014-6-11 19:00:00

GcMultiRow默认注册Enter键来控制编辑状态,你可以更改这个默认的方式:
通过DesignTime,设置GcMultiRow的ShortcutKeyManager,你可以在IDE下选择属性浏览器,点击ShortcutKeyManager属性编辑器来更改默认的快捷键设置。


PopupEditingControl是一个复合Control,你需要Handle正真编辑的Control,请参考下边的代码,这个代码是如果按下Space键将弹出Popup Window。

      private void Form1_Load(object sender, EventArgs e)
      {
            this.gcMultiRow1.EditingControlShowing += gcMultiRow1_EditingControlShowing;
      }

      void gcMultiRow1_EditingControlShowing(object sender, GrapeCity.Win.MultiRow.EditingControlShowingEventArgs e)
      {
            PopupEditingControl popEdit = e.Control as PopupEditingControl;
            if (popEdit != null)
            {
                popEdit.Controls.KeyPress += (s, arg) =>
                {
                  if (arg.KeyChar == ' ')
                  {
                        SendKeys.Send("{F4}");//Pop up PopupWindow.
                  }
                };
            }
      }

GPCT 发表于 2014-6-12 13:52:00

收到,非常感谢~

就ShortcutKeyManager这个机能来说,Multirow真是一个伟大的产品,赞~

dafo 发表于 2014-6-12 15:08:00

非常感谢你对我们产品的评价,很高兴为你服务。
页: [1]
查看完整版本: Multirow6.0 的Popupcell如何响应KeyPress事件