主题:关于ListBox的问题
孙瑞
[专家分:590] 发布于 2008-07-01 23:44:00
在某文件夹下,有一个avi文件,在我这个Function执行的时候,在Listbox中,会反复添加几次这个AVi文件的路径,其它的文件也是一样!
但是,在我把
If qq = "mp3" Then
List1.AddItem pathi & name
后面的elseif代码删掉后,又恢复正常了,请高手指教!是不是If中OR的使用失误?
Function kzm(name)
Dim qq As String
Dim qs As Long
qs = InStrRev(name, ".")
If qs = 0 Then
Exit Function
Else
qq = Mid(name, qs + 1, Len(name) - qs)
If qq = "mp3" Then
List1.AddItem pathi & name
ElseIf qq = "wmv" Then
MsgBox "Add mp3"
List1.AddItem pathi & name
ElseIf qq = "avi" Then
MsgBox "Add mp3"
List1.AddItem pathi & name
ElseIf qq = "wma" Then
List1.AddItem pathi & name
ElseIf qq = "wav" Then
List1.AddItem pathi & name
Else
End If
kzm = qq
End If
qq = ""
End Function
最后更新于:2008-07-03 22:19:00
回复列表 (共17个回复)
沙发
snyga [专家分:1480] 发布于 2008-07-02 00:54:00
这是全部代码吗?
你这用 select case 不是更好吗?
1 ╔ Function kzm(name)
2 │ Dim qq As String
3 │ Dim qs As Long
4 │ qs = InStrRev(name, ".")
5 │╔ If qs = 0 Then
6 ││◆ Exit Function
7 │╞ Else
8 ││ qq = Mid(name, qs + 1, Len(name) - qs)
9 ││╔ If qq = "mp3" Then
10 │││ List1.AddItem pathi & name
11 ││╞ ElseIf qq = "wmv" Then
12 │││● MsgBox "Add mp3"
13 │││ List1.AddItem pathi & name
14 ││╞ ElseIf qq = "avi" Then
15 │││● MsgBox "Add mp3"
16 │││ List1.AddItem pathi & name
17 ││╞ ElseIf qq = "wma" Then
18 │││ List1.AddItem pathi & name
19 ││╞ ElseIf qq = "wav" Then
20 │││ List1.AddItem pathi & name
21 ││╞ Else
22 ││╚ End If
23 ││ kzm = qq
24 │╚ End If
25 │ qq = ""
26 ╚ End Function
板凳
tanchuhan [专家分:15140] 发布于 2008-07-02 03:05:00
qq = Mid(name, qs + 1, Len(name) - qs)
简化版:
qq = Mid(name, qs + 1)
另外,你代码的缩进莫名其妙,没眼看。
3 楼
老大徒伤悲 [专家分:29120] 发布于 2008-07-02 08:59:00
snyga关于循环的注解很有创意!赞一个。
楼主说的,多次添加,问题不在这个函数里。估计是你多次调用了这个函数。
另外,楼主的代码里:
If qq = "mp3" Then
List1.AddItem pathi & name
ElseIf qq = "wmv" Then
MsgBox "Add mp3"
List1.AddItem pathi & name
ElseIf qq = "avi" Then
MsgBox "Add mp3"
List1.AddItem pathi & name
ElseIf qq = "wma" Then
List1.AddItem pathi & name
ElseIf qq = "wav" Then
List1.AddItem pathi & name
Else
End If
实际上,执行的内容是一样的,何必要分开阿?
If qq = "mp3" or qq = "wmv" or qq = "avi" Then
MsgBox "Add mp3"
List1.AddItem pathi & name
endif
if qq = "wma" or qq = "wav" Then List1.AddItem pathi & name
这样应该与原代码效果一致阿。
4 楼
孙瑞 [专家分:590] 发布于 2008-07-03 13:33:00
我今天晚上把整个工程传上来,给各位专家帮忙修改一下,谢谢!
5 楼
孙瑞 [专家分:590] 发布于 2008-07-03 13:45:00
我觉得是这个VB的内核有问题
因为,如果我把"avi"换成了"mp3"
就不会出现这个问题了!
我现在想是不是改一句:
List1.AddItem pathi & name中的“pathi & name”
在前面用一个变量表示,例如
Dim temps As String
temps=pathi & name
'经过修改的完整段为:
Function kzm(name)
Dim qq As String
Dim qs As Long
qs = InStrRev(name, ".")
If qs = 0 Then
Exit Function
Else
qq = Mid(name, qs + 1)
temps=pathi & name
If qq = "mp3" Then
List1.AddItem temps
ElseIf qq = "wmv" Then
List1.AddItem temps
ElseIf qq = "avi" Then
List1.AddItem temps
ElseIf qq = "wma" Then
List1.AddItem temps
ElseIf qq = "wav" Then
List1.AddItem temps
Else
End If
kzm = qq
End If
qq = ""
End Function
修改的原因:我有一次用Inet控件,OpenURL(<String>)时,,<string>直接填的是Text,即
.....................
text2=Inet1.OpenURL(Text1)
....................
结果输入有些网页的地址就执行错误
后来我哥哥提示我,将TEXT事先用一个字符串表示,例如
tmp=Text1
text2=Inet1.OpenURL(tmp)
这样修改了之后,就可以了!
所以,我联想到是不是应该这样改……
请各位大虾指点!
6 楼
孙瑞 [专家分:590] 发布于 2008-07-03 13:47:00
现在不在家,所以无法实际测试…………
7 楼
tanchuhan [专家分:15140] 发布于 2008-07-03 19:26:00
哈哈,楼主强,竟然因为这几行质疑VB的内核
8 楼
孙瑞 [专家分:590] 发布于 2008-07-03 22:18:00
可惜,在家里按照我早上的猜想,又失败了!
9 楼
孙瑞 [专家分:590] 发布于 2008-07-03 22:24:00
刚才提交了了原始工程文件……
大家参考一下,给一下意见
(在测试的目录中放一个AVI文件,看看会不会出现 在ListBox中重复添加路径的情况)
比如说,正常情况下,某目录有一个AVI文件,那么这个程序就会在列表框中显示:
C:\………………\某某.avi
但是,不正常的情况是,当切换到这个目录的时候,出现这种情况:
C:\………………\某某.avi
C:\………………\某某.avi
C:\………………\某某.avi
C:\………………\某某.avi
C:\………………\某某.avi
C:\………………\某某.avi
连续List1.AddItem "C:\………………\某某.avi"好几次,
这不正常,请高手指教!
10 楼
孙瑞 [专家分:590] 发布于 2008-07-03 22:32:00
其实,我先前的代码和版主说的建议是不谋而合,但是没有效果,所以我才会侥幸换换,试一下行不行。
我来回复