定义了全局变量i,j,还有个timer控件等
在Private Sub choose_Click()过程中利用i,j当控件数组的下标(都从1开始),用的排序,所以i和j的值是随时变化的.Private Sub choose_Click()
......
 Call Timer1
.........
End sub在Timer1过程中如下
Private Sub Timer1_Timer()
Call jiaohuan'自定义的一个过程
End Sub在Sub jiaohuan()中引用i和j,报错说"找不到下标为0的控件"
我i和j都是从1开始,当然找不到,证明i和j的值根本不是Sub choose_Click()中i和j的值,请问如果才能叫Sub jiaohuan()中i和j的值随时都和Sub choose_Click()中i和j的值保持同步?

解决方案 »

  1.   

    Call jiaohuan'这个函数代码你应该给出来,否则没办法解决你的问题。
      

  2.   

    你函数放在哪!?定义一个窗口级的变量就行了。====================
    免费的学习交流网站,欢迎大家访问!
    http://www.j2soft.cn/
      

  3.   

    你是怎样定义TIMER控件组的,我觉得你的控件组定义有问题
      

  4.   

    我现在把代码贴出来,大家看看如何改.
    Dim time As Integer, sum As Integer
    Dim i As Integer, j As Integer, k As Integer, temp As String, add As IntegerPrivate Sub display(arr) '显示随机数
    For i = 1 To 10
      arr(i).Caption = Int(Rnd() * 100 + Rnd() * 10)'第一组,数不变
      lab(i).Caption = Int(Rnd() * 100 + Rnd() * 10)'第二组,每次排序的结果放到这里
    Next i
    End Sub
    Private Sub choose_Click()
    sum = 0
    Form1.Cls
    Call display
    For i = 1 To 10 - 1
    time = 0
     For j = i + 1 To 10
      If Val(lab(j).Caption) < Val(lab(i).Caption) Then   '判断是否需要交换数据
       a.Visible = True '用于演示交换的一个标签
       b.Visible = True '另一个
       a.Left = arr(i).Left
       b.Left = arr(j).Left
       a.Top = arr(i).Top
       b.Top = arr(j).Top
       Call Timer1
       '交换
       temp = lab(i).Caption: lab(i).Caption = lab(j).Caption: lab(j).Caption = lab(i).Caption
       time = time + 1 'time为每趟循环的交换次数
      End If
     Next j
     
     Print "第"; i; "次循环排序  ";
       For k = 1 To 10
       Print lab(k).Caption;
      Next k
     Print "  数据交换了"; time; "次" '输出交换次数
     sum = sum + time 'sum为总的交换次数
    Next i
    Print "------------------------------------------------------------------------------------------"
    Print "利用选择排序法(从小到大)排序后的数据为:"
    For i = 1 To 10
     Print lab(i).Caption;
    Next i
    Print
    Print "数据总共交换了"; sum; "次"
    End Sub
    Private Sub Timer1_Timer()
    Call jiaohuan
    End SubSub jiaohuan()'问题在这,这里的i和j的值是0,根本不是choose()中的i和j的值,请问怎么修改?
    For add = a.Top To a.Top + a.Height Step -1
     If a.Top > a.Top - a.Height Then a.Top = a.Top - 1
     If b.Top > b.Top - b.Height Then b.Top = b.Top - 1
    Next
    For add = 1 To lab(j).Left - lab(i).Left
     If a.Left < lab(j).Left Then a.Left = a.Left + 1
     If b.Left > lab(i).Left Then b.Left = b.Left - 1
    Next
    For cc = a.Top = a.Top To a.Top - a.Height
     a.Top = a.Top + 1
     b.Top = b.Top + 1
    NextEnd Sub
      

  5.   

    Call Timer1

    Private Sub Timer1_Timer()
    Call jiaohuan
    End Sub
    根本是两回事应该写成
    Private Sub Timer1()
    Call jiaohuan
    End Sub