回 帖 发 新 帖 刷新版面

主题:关于ListBox的问题

在某文件夹下,有一个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

回复列表 (共17个回复)

沙发

这是全部代码吗?
你这用 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

板凳

qq = Mid(name, qs + 1, Len(name) - qs)
简化版:
qq = Mid(name, qs + 1)

另外,你代码的缩进莫名其妙,没眼看。

3 楼

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 楼

我今天晚上把整个工程传上来,给各位专家帮忙修改一下,谢谢!

5 楼

我觉得是这个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 楼

现在不在家,所以无法实际测试…………

7 楼

哈哈,楼主强,竟然因为这几行质疑VB的内核

8 楼

可惜,在家里按照我早上的猜想,又失败了!

9 楼

刚才提交了了原始工程文件……
大家参考一下,给一下意见

(在测试的目录中放一个AVI文件,看看会不会出现  在ListBox中重复添加路径的情况)
比如说,正常情况下,某目录有一个AVI文件,那么这个程序就会在列表框中显示:
C:\………………\某某.avi
但是,不正常的情况是,当切换到这个目录的时候,出现这种情况:
C:\………………\某某.avi
C:\………………\某某.avi
C:\………………\某某.avi
C:\………………\某某.avi
C:\………………\某某.avi
C:\………………\某某.avi
连续List1.AddItem "C:\………………\某某.avi"好几次,
这不正常,请高手指教!

10 楼


其实,我先前的代码和版主说的建议是不谋而合,但是没有效果,所以我才会侥幸换换,试一下行不行。

我来回复

您尚未登录,请登录后再回复。点此登录或注册