找回密码
 立即注册

QQ登录

只需一步,快速开始

yinzhm

初级会员

32

主题

129

帖子

339

积分

初级会员

积分
339

活字格认证微信认证勋章

yinzhm
初级会员   /  发表于:2014-7-9 16:18  /   查看:11318  /  回复:12
好!
MultiRow For Winforms 7.0

如果一个键绑定了Action动作,该键就不会触发KeyDown事件。     目前试验的结果是这样,不过觉得这样也合理。如果想要在KeyDown事件中处理按键,需要先将Action清除。(个别按键,如Tab,还需要PreviewKeyDown中额外处理)

问题:
Me.GcMultiRow1.ShortcutKeyManager.Clear()
Me.GcMultiRow1.EditMode = EditMode.EditOnEnter
这种设置下,在Cell中按下Tab键,我认为应该没有任何动作,但是实际上Tab键按下后,会使MultiRow失去焦点,触发Leave事件。
从现象上看像是执行了系统的Tab动作。
但是我在ProcessCmdKey将Tab键吃掉了,按下tab键的时候仍然触发Leave事件。
所以是不是MultiRow在这种情况下,做了什么处理?

12 个回复

正序浏览
Alice
社区贡献组   /  发表于:2014-7-15 18:26:00
13#
回复 12楼yinzhm的帖子

呵呵,谢谢。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
yinzhm
初级会员   /  发表于:2014-7-14 17:39:00
12#
回复 11楼Alice的帖子

必须关注!!!
各位斑竹都辛苦啦,哈哈!!!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-7-14 17:10:00
11#
回复 10楼yinzhm的帖子

能够帮助到你,我们很高兴。
欢迎继续关注GCDN论坛。

另外,感谢dafo版主,辛苦了。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
yinzhm
初级会员   /  发表于:2014-7-14 15:02:00
10#
回复 8楼dafo的帖子

以前对EditingControl和Cell没什么理解,遇到了一些问题之后,发现应该好好认识一下。
回复 使用道具 举报
yinzhm
初级会员   /  发表于:2014-7-14 14:52:00
9#
回复 8楼dafo的帖子

了解了,和我想象的一样,明白为什么就好了。
谢谢斑竹的解答和方案!
回复 使用道具 举报
dafo
版主   /  发表于:2014-7-14 14:44:00
8#
GcMultiRow只有在进入编辑状态时才渲染EditingControl,在你的Case中当Validating失败,EditingControl没有机会退出编辑状态,应此你之前的方案是一个办法,强行EndEdit再EnterEdit使得GcMultiRow有一个机会把Cell对象上用户设置的Style应用到EditingControl上。
我这里有另外一个方案,你可以参考:

  1.         void gcMultiRow1_CellValidating(object sender, GrapeCity.Win.MultiRow.CellValidatingEventArgs e)
  2.         {
  3.             this.gcMultiRow1.CurrentCell.Style.BackColor = Color.Red;
  4.             this.gcMultiRow1.EditingControl.BackColor = Color.Red;
  5.             this.gcMultiRow1.EditingPanel.BackColor = Color.Red;
  6.             e.Cancel = true;
  7.         }
复制代码
回复 使用道具 举报
yinzhm
初级会员   /  发表于:2014-7-11 19:37:00
7#
回复 5楼dafo的帖子

不好意思,高级编辑器被屏蔽了,使用不了。
回复 使用道具 举报
yinzhm
初级会员   /  发表于:2014-7-11 19:36:00
6#
回复 5楼dafo的帖子

使用干净的Sample也不好使。

Private Sub EidtMultiRow_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.GcMultiRow1.EditMode = GrapeCity.Win.MultiRow.EditMode.EditOnEnter
        Me.GcMultiRow1.ShortcutKeyManager.Clear()
    End Sub

    Private Sub GcMultiRow1_KeyDown(sender As Object, e As KeyEventArgs) Handles GcMultiRow1.KeyDown
        If e.KeyCode = Keys.Enter Then
            GrapeCity.Win.MultiRow.SelectionActions.MoveToNextCell.Execute(Me.GcMultiRow1)
        End If
    End Sub

    Private Sub GcMultiRow1_EditingControlShowing(sender As Object, e As GrapeCity.Win.MultiRow.EditingControlShowingEventArgs) Handles GcMultiRow1.EditingControlShowing
        Dim controlType As String = e.Control.GetType.Name

        If controlType = "TextBoxEditingControl" Then
            Dim tbControl As TextBoxEditingControl = TryCast(e.Control, TextBoxEditingControl)
            If tbControl IsNot Nothing Then

                RemoveHandler tbControl.KeyDown, AddressOf Me.GcMultiRow1_KeyDown
                AddHandler tbControl.KeyDown, AddressOf Me.GcMultiRow1_KeyDown
            End If
        End If
    End Sub

    Private Sub GcMultiRow1_CellValidating(sender As Object, e As CellValidatingEventArgs) Handles GcMultiRow1.CellValidating
        If e.FormattedValue = "123" Then
            Me.GcMultiRow1.CurrentCell.Style.BackColor = Color.Red
            e.Cancel = True
        End If
    End Sub
回复 使用道具 举报
dafo
版主   /  发表于:2014-7-11 18:17:00
5#
我试验了你的Case,但是在我这里单元格背景色是可以更新的,是否可以给一些你的相关代码我们测试下,或者你建一个干净的Sample测试下。
如果你要刷新GcMultiRow建议使用方法this.gcMultiRow1.Refresh()来强制刷新,不用调用BeginEdit和EndEdit。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部