我没用数组,用了很多label做了个打字程序
其中6个label从程序顶部下沉,到frame1底部响应停止事件,现遇到问题是如果6个label里有两个label显示相同的string,如何让程序自动判断从下往上的执行顺序。请高手指教,如何改代码,谢谢。
text代码如下:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
If UCase(RTrim(Text1.Text)) = UCase(Label11.Caption) Then
Text1.Text = ""
Text1.SetFocus
Label1.Top = 0
Init1
Label24.Caption = Val(Label24.Caption) + 1
Label7.Caption = "正确"
Label7.BackColor = &HFF00&
Label7.FontSize = 28
ElseIf UCase(RTrim(Text1.Text)) = UCase(Label12.Caption) Then
Text1.Text = ""
Text1.SetFocus
Label2.Top = 0
Init2
Label24.Caption = Val(Label24.Caption) + 1
Label7.Caption = "正确"
Label7.BackColor = &HFF00&
Label7.FontSize = 28
ElseIf UCase(RTrim(Text1.Text)) = UCase(Label13.Caption) Then
Text1.Text = ""
Text1.SetFocus
Label3.Top = 0
Init3
Label24.Caption = Val(Label24.Caption) + 1
Label7.Caption = "正确"
Label7.BackColor = &HFF00&
Label7.FontSize = 28
ElseIf UCase(RTrim(Text1.Text)) = UCase(Label14.Caption) Then
Text1.Text = ""
Text1.SetFocus
Label4.Top = 0
Init4
Label24.Caption = Val(Label24.Caption) + 1
Label7.Caption = "正确"
Label7.BackColor = &HFF00&
Label7.FontSize = 28
ElseIf UCase(RTrim(Text1.Text)) = UCase(Label15.Caption) Then
Text1.Text = ""
Text1.SetFocus
Label5.Top = 0
Init5
Label24.Caption = Val(Label24.Caption) + 1
Label7.Caption = "正确"
Label7.BackColor = &HFF00&
Label7.FontSize = 28
ElseIf UCase(RTrim(Text1.Text)) = UCase(Label16.Caption) Then
Text1.Text = ""
Text1.SetFocus
Label6.Top = 0
Init6
Label24.Caption = Val(Label24.Caption) + 1
Label7.Caption = "正确"
Label7.BackColor = &HFF00&
Label7.FontSize = 28
Else
Text1.Text = ""
Label7.Caption = "错误"
Label7.BackColor = &HFF&
Label7.FontSize = 28
End If
End If
If KeyAscii = 27 Then
Text1.Text = ""
End If
End Sub
程序运行如下~
当程序开始时,label1到label6的caption随机读取目录下固定txt文件里的string,从frame1顶部垂直向下移动(移动秩序错乱),当label1~6只要有一个到达frame1底部,响应结束事件,当text1输入与label1~6其中一个相同,其重新随机读取txt里的string,并重新从frame1顶部下沉。
遇到的问题是,比如当label1和6显示相同的string时,而label6将要比label1先到达frame1底部触发结束事件,text1输入并没有执行label6,而执行了label1。
请教高手的目的是修改代码使程序运行时如果有两个相同label能自行判断执行秩序,即快到达底部的先执行。
或修改代码防止label1~6显示相同的string。
代码补充如下:init1~6代码相同,因字数限制就放了init1的。
Dim MaxLine As Long
Dim sFilePath As String
Sub Init1()
Dim s As String, a
Randomize
Do
s = RndLine(Int(Rnd * MaxLine) + 1)
a = Split(s, """ """)
Loop While UBound(a) = 0
Label1.Caption = Replace(Trim(a(0)), """", "")
Label11.Caption = Replace(Trim(a(1)), """", "")
End Sub
text输入代码就是原问题中的那些
|