找回密码
 立即注册

QQ登录

只需一步,快速开始

hanamichi

论坛元老

12

主题

40

帖子

1万

积分

论坛元老

积分
13590

活字格认证

hanamichi
论坛元老   /  发表于:2014-7-15 21:29  /   查看:10365  /  回复:10
我想实现通过滚轮翻页, 下面这段程序 为什么会走三遍 ?

    Private Sub FpSpread2TopChange(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.TopChangeEventArgs) Handles FpSpread2.TopChange
        If FpSpread2.GetViewportTopRow(0) > oldViewportTopRow2 Then
            If oldViewportTopRow2 = -1 Then
                oldViewportTopRow2 = 0
            End If
            Me.FpSpread2.SetViewportTopRow(0, oldViewportTopRow2 + 20)      -------------①
            Me.FpSpread2.SetViewportLeftColumn(0, 0)
            Me.FpSpread2_Sheet1.ActiveRowIndex = oldViewportTopRow2 + 20
        ElseIf FpSpread2.GetViewportTopRow(0) < oldViewportTopRow2 Then
            Me.FpSpread2.SetViewportTopRow(0, oldViewportTopRow2 - 20)
            Me.FpSpread2.SetViewportLeftColumn(0, 0)
            Me.FpSpread2_Sheet1.ActiveRowIndex = oldViewportTopRow2 - 20
        End If
        oldViewportTopRow2 = FpSpread2.GetViewportTopRow(0)
End Sub     --------------------------------------------------------------------------------------②

第一次走到①、跳回程序开头, 第二次走到②、却跳回①了、又接着走完。为啥 ?

10 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2014-7-16 09:53:00
沙发
回复 1楼hanamichi的帖子

因为调用了 SetViewportTopRow 方法再次触发了 FpSpread2TopChange 事件。
回复 使用道具 举报
hanamichi
论坛元老   /  发表于:2014-7-17 09:24:00
板凳
回复 2楼iceman的帖子

谢谢回答,第一次走到①后跳回开头我能明白,不过为什么这次走到程序结尾②的时候,又一次跳回第一个if文中的①那里呢?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-7-17 18:51:00
地板
回复 3楼hanamichi的帖子

恩,现象我重现了,还在调查中。
有进一步结果通知你。
回复 使用道具 举报
hanamichi
论坛元老   /  发表于:2014-7-22 10:49:00
5#
顶一下
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-7-22 18:25:00
6#
回复 5楼hanamichi的帖子

问题已经反馈给产品组,目前还没收到反馈,有进一步结果我会第一时间通知你。
回复 使用道具 举报
yinzhm
初级会员   /  发表于:2014-7-22 18:35:00
7#
第一次的TopChange事件,执行到(1)的位置,由于又触发了TopChange,因此第一次的TopChange事件处理发生了中断,进而开始执行第二次TopChange事件处理。
待到第二次TopChange事件处理完成时,也就是(2)之后的位置。就会返回第一次发生中断的位置继续执行未执行完成的代码。

感觉像是这样,VB.NET中的事件处理机制的确是这样,与VB不同。
个人理解,仅供参考!
回复 使用道具 举报
hanamichi
论坛元老   /  发表于:2014-7-23 09:34:00
8#
好的,谢谢版主和yinzhm兄,等结果!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-7-23 12:26:00
9#
回复 8楼hanamichi的帖子

hanamichi 你好
我们这边产品组给出的结论和7#中的朋友是一致的,这种情况是由.NET机制导致的。
回复 使用道具 举报
hanamichi
论坛元老   /  发表于:2014-7-23 15:15:00
10#
原来如此。由于多走了一遍,我debug会发现因为多做了一次加算,中途的执行结果是错误的。
但很奇妙的是,最后的结果居然是正确的。
是不是说这种情况没办法避免,我只关心最后的结果就行了?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部