本帖最后由 bcrun 于 2013-04-22 14:55:52 编辑

解决方案 »

  1.   

    If Picture6(i).Picture.Handle = 0 Then i=0 试试
      

  2.   

    Private Sub Timer2_Timer()
        Static i As Long
        Dim j As Long
        Dim C As Integer
     
        For j = Picture6.lbound To Picture6.UBound
            Picture6(j).Visible = (i = j)
        Next
        
        i = i + 1
        
        If i > Picture6.UBound Or Picture6(i).Picture.Handle = 0 Then
            i = Picture6.lbound
        End If
    End Sub
      

  3.   

    经测试不行,这种更改跟if Picture6(i).Picture.Handle = 0 Then i=0   是一样的效果,图像停止在第一副图不动。
      

  4.   

    关键是如何检测 PictureBox 是空的。是 Picture6(i).Picture.Handle = 0 吗?你可以试试在立即窗口中使用 i 为一个空图片框的 Index 来测试:
    ?Picture6(i).Picture.Handle另外,可以试试 Picture6(i).Picture = Nothing
    Private Sub Form_Load()
    Dim i As Long    For i = Picture6.lbound To Picture6.UBound
            Picture6(i).Visible = False
        Next i
    '......
    End SubPrivate Sub Timer2_Timer()
    Static i As Long
    Static j As Long    If i = 0 Then
            Picture6(Picture6.UBound).Visible = False
            Picture6(j).Visible = False
        Else
            Picture6(i - 1).Visible = False
        End If
        Picture6(i).Visible = True    If i = Picture6.UBound Then
            i = 0
        Else
            If Picture6(i + 1).Picture = Nothing Then
                j = i
                i = 0
            Else
                i = i + 1
            End If
        End If
    End Sub
      

  5.   

    7楼的方法还是不行哟,跟前面一样,到第一个图就不动,我用的是Picture6(i).Picture.Handle = 0来检测的,如果用Picture6(i).Picture=nothing好像会报错
      

  6.   

    如果用Picture6(i).Picture=nothing好像会报错,提示对象使用无效,我用的是VB6
      

  7.   

    Picture6(i).Picture is nothing =>
    If Picture6(i + 1).Picture is Nothing Then
      

  8.   

    Picture6(i).Picture is nothing =>
    If Picture6(i).Picture is Nothing Then
      

  9.   

    让图片框缺省不可见:Private Sub Timer2_Timer()
    Static i As Long, j As Long    Picture1(j).Visible = False
        If Picture1(i).Picture.Handle Then
            Picture1(i).Visible = True
            j = i
        End If
        Do
            i = (i + 1) Mod Picture1.Count
        Loop Until Picture1(i).Picture.Handle
    End Sub
      

  10.   

    控件数组可以动态加载的,有几幅图就加载几个,就没有判断的需要了。
    '设计时只保留一个 Picture6(0)
    '加载前 Timer2.Enabled = FalsePrivate Sub Form_Load()
        Dim lCount As Long
        Dim W As Single
        Dim H As Single
        Dim i As Long
        '卸载
        For i = Picture6.UBound To 1 Step -1
            Unload Picture6(i)
        Next
        
        '模拟图片数量和大小
        lCount = 1 + Int(Rnd() * 20)
        W = 1200
        H = 600
        
        '加载
        Picture6(0).Move 0, 0, W, H
        Picture6(0).Picture = 图片(0)
        For i = 1 To lCount - 1
            Load Picture6(i)
            Picture6(i).Move 0, 0, W, H
            Picture6(i).Picture = 图片(i)
        Next
        
        Timer2.Enabled = True
    End Sub
      

  11.   

    本帖最后由 bcrun 于 2013-04-28 12:45:22 编辑
      

  12.   

    本来看了楼主的贴子,我想说的也跟1F是一样的。
    但看了楼主在2F的回复,似乎察觉到了点什么苗头。楼主试下这个代码,应该符合你的想法了:
    Private Sub Timer2_Timer()
    Static i As Long
       Dim j As Long
       Dim C As Integer   For j = Picture6.lbound To Picture6.UBound
           Picture6(j).Visible = False
       Next j
       Picture6(i).Visible = True
       i = i + 1
       'If Picture6(i).Picture.Handle = 0 Then Exit Sub
       'If i = j Then i = 0       '这句不要
       '添加下面的代码:
       For j = i To Picture1.UBound
          If (Picture6(j).Picture.Handle) Then i = j: Exit Sub
       Next
       If (j > Picture1.UBound) Then i = 0
    End Sub
      

  13.   

    22F的代码中,Picture1改成Picture6
      

  14.   

    22楼的代码真的很好. 我想了一个,本来以为很难做.其实方法很多的.   假如有100张图片,就不需要经常循环了,下面的代码只要稍许改造,把循环和判断放在加载中和以及arr()数组放在公用即可,那么在Timer事件中甚至不需要循环都可以做到的.昨天喝多了,早睡了, 难得今天早起,呵呵.Private Sub Timer2_Timer()
        Static i As Long, j As Long, k As Long, arr()
        For j = Picture6.lbound To Picture6.UBound
            Picture6(j).Visible = False
            If Picture6(j).Picture.Handle Then
                k = k + 1
                ReDim Preserve arr(1 To k)
                arr(k) = j
            End If
        Next j
        i = i + 1
        Picture6(arr(i)).Visible = True
        If i > k Then i = 1
       
    End Sub
      

  15.   


    接上楼, 也就是这样Dim k As Long
    Dim arr()Private Sub Form_Load()
        Dim j As Long
        ReDim arr(1 To Picture6.UBound + 1)
        For j = Picture6.lbound To Picture6.UBound
            Picture6(j).Visible = False
            If Picture6(j).Picture.Handle Then
                k = k + 1
                arr(k) = j
            End If
        Next j
    End SubPrivate Sub Timer2_Timer()
        Static i As Long
        i = i + 1
        Picture6(arr(i)).Visible = True
        If i > 1 Then Picture6(arr(i - 1)).Visible = False
        If i > k Then i = 1
       
    End Sub