作者SmallBeeWayn (喵喵叫的蜜蜂猫)
看板Visual_Basic
标题Re: [VB6 ] 连续循环数的出现
时间Sat Mar 24 20:44:01 2007
※ 引述《stormbird (单眼皮)》之铭言:
: 我想写一个在Text.text里面连续出现数字的一个东西
: 例如:我在Text1.text=48,Text2.text=51
: 而我要在Text3.text依序出现49,50,51
你是故意要略过48还是少写了?
我这里暂时当你少写了, 如果要略过起始值,判断会多一些...
: 如果Text1.text=48,Text2.text=48
: 则Text3.text=48
: 我有先写出来,但是出现的都不是我想要
: 我这样写不知是否正确
: 请各位给我一点指教,指点指点我,谢谢
: Dim n1 As Integer
: Dim n2 As Integer
其实宣告成Long比较好,现在的电脑都是32bit以上
不过这只是效率问题,不影响结果
: n1 = Val(Text1(0).Text)
: n2 = Val(Text2(0).Text)
如果你不是Text阵列的话,用Text1.Text ; Text2.Text就好了...
另外, Text的预设属性是Text, 因此只要用Text1 ; Text2就行了
: If n1 > n2 Then
: For i = n1 To n2 Step -1
: Text3(0).Text = ""
: Text3(0).Text = i
不需要先清除在填入新的资料,直接填入即可
: Next i
: ElseIf n1 < n2 Then
: For i = n1 To n2 Step 1
For预设就是Step 1, 不用特别写
: Text3(0).Text = ""
: Text3(0).Text = i
: Next i
: i = n1 = n2
VB6不允许这样写,你得拆两行
而且你这里结构怪怪的...
: Text3(0).Text = ""
: Text3(0).Text = i
: End If
首先, 你在回圈中不断的清除Text3的内容,但是却没有等待动作
因此实际跑的时候你完全看不到数字在跳...
第二, 你没有考虑到n1=n2的状况
另外我不清楚你的「依序出现」到底是怎麽样
基本上,你程式应该至少改成这样
If n1 > n2 Then
For i = n1 To n2 Step -1
Text3 = i
Next i
Else 'n1 <= n2
For i = n1 To n2
Text3 = i
Next i
End If
但是比较好的写法是
If n1 > n2 Then x = -1 Else x = 1
For i = n1 To n2 Step x
Text3 = i
Next i
这样写的好处是防止未来修订时要同步修改两组叙述的麻烦
至於如果要耍专业也可以写成这样
For i = n1 To n2 Step Choose((n1 > n2) + 2, -1, 1)
Text3 = i
Next i
第一行的叙述是这样的意思:
n1 > n2 为 True 时, 在VB6被定义为数字-1
False 0
所以(n1 > n2) + 2 在True时为1=>输出-1, False时为2=>输出1
或者你也可以玩数学游戏
For i = n1 To n2 Step (n1 > n2) * 2 + 1
Text3 = i
Next i
稍微想一下就知道 0*2+1=1, -1*2+1=-1
不过这两种方法都算是撇步,可读性很差
建议还是用If ... Then x = ??? 的方式
============
上面是程式码本身最佳化的部份,接着,在实务上
就算Text3有更新内容,也太快了你会看不到数字
最基本的,就是在回圈内加上延迟,如
For ...
Text3 = i
For q = 1 To 10000 '回圈多长依据打算延迟多久而定
Doevents
Next q
Next
--
填充题: ______なのはいけないと思います!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.204.46
※ 编辑: SmallBeeWayn 来自: 140.115.204.46 (03/24 20:45)