找回密码
 立即注册

QQ登录

只需一步,快速开始

lisa·38757578

注册会员

5

主题

18

帖子

73

积分

注册会员

积分
73
最新发帖
lisa·38757578
注册会员   /  发表于:2018-9-6 10:44  /   查看:3099  /  回复:4
你好。我是新手,现在遇到了一个问题是在执行BeforeRowColChange的时候会出现死循环现象。请问有什么方法可以 回避的吗?接着就出现了【StackOverflowException】错误提示!谢谢!

4 个回复

倒序浏览
JeffryLI
葡萄城公司职员   /  发表于:2018-9-6 14:46:05
沙发
您好,具体代码可以贴一下,从您的描述很难判断是什么问题引起的,或者方便的话,给我一个demo,我帮您调试,希望能帮到您。
请点击评分,对我5分评价,谢谢!

葡萄城控件服务团队
官方网站: https://www.grapecity.com.cn/developer
回复 使用道具 举报
lisa·38757578
注册会员   /  发表于:2018-9-6 15:01:26
板凳
    Private Sub tdbgDetail_BeforeRowColChange(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.CancelEventArgs) Handles tdbgGrid.BeforeRowColChange
        Try
            MoveGridCarsor(sender, e)
        Catch ex As Exception
            Dim log As WriteDBLog = New WriteDBLog(Me)
            log.SystemErrWithDBLog(ex)
        End Try
    End Sub
   
    ''' <summary>
    ''' グリッド上で特殊なカーソル移動を行う。
    ''' </summary>
    Private Sub MoveGridCarsor(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.CancelEventArgs)
        Try
            Dim tdbg As TrueDBGridEx = TryCast(sender, TrueDBGridEx)
            With tdbg
                ' 値に応じてセルの移動先を切り替えます。
                Dim currentDispCol As C1DisplayColumn = .Splits(0).DisplayColumns(.Col)
                Dim dataField As String = currentDispCol.DataColumn.DataField

                SetInputColumns(tdbg.Name)

                Dim idx As Integer
                idx = m_tabColumns.IndexOf(dataField)
                If idx = -1 Then
                    Return
                End If

                If .PressGridTabEnter = -1 Then
                   此处省略
                ElseIf .PressGridTabEnter = 1 Then
                    If idx < m_tabColumns.Count - 1 Then
                        '次へ移動
                        e.Cancel = True
                        .Col = .Splits(0).DisplayColumns.IndexOf(.Splits(0).DisplayColumns(m_tabColumns(idx + 1).ToString))<----运行到这里之后就会出现BeforeRowColChange的无限循环
                    Else
                        ' 最終列の場合の記述
                        e.Cancel = True
                        Dim row As Integer = .Row + 1
                        If row < .Splits(0).Rows.Count Then
                            Dim firstCol As String = m_tabColumns(0).ToString
                            .Col = .Splits(0).DisplayColumns.IndexOf(.Splits(0).DisplayColumns(firstCol))
                            If tdbg.BeforeColUpdateCancel = False OrElse dataField = firstCol Then
                                .Row = row
                            End If
                        End If
                    End If
                End If
            End With
        Catch ex As Exception
            Throw
        End Try
    End Sub
回复 使用道具 举报
lisa·38757578
注册会员   /  发表于:2018-9-7 08:13:26
地板
请问这个有什么解决方法吗?
回复 使用道具 举报
JeffryLI
葡萄城公司职员   /  发表于:2018-9-7 10:06:18
5#
您好,原因可能是在MoveGridCarsor方法里面有更改其他行列的值,导致又触发BeforeRowColChange事件,这样就形成了死循环
请点击评分,对我5分评价,谢谢!

葡萄城控件服务团队
官方网站: https://www.grapecity.com.cn/developer
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部