vb.net高手帮忙看一下这个从listbox中截取字符串的代码哪里不对

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb.net高手帮忙看一下这个从listbox中截取字符串的代码哪里不对相关的知识,希望对你有一定的参考价值。

已经用FolderBrowserDialog将一个目录下的所有文件都添加到了listbox中,但是每个文件还都带着文件夹路径以及盘符。为了去掉文件夹名,只留文件名,我这样子:
Dim s As String
Dim i As Integer
ListBox1.SelectedIndex=0
For i=1 To ListBox1.Items.Count
i=i+1
ListBox1.SelectedIndex=Listbox1.SelectedIndex+1
s=ListBox1.Items(ListBox1.SelectedIndex)
ListBox1.Items.Add(Mid(s,Len(FolderBrowserDialoa1.SelectedPath+1)))'Len后面就是导入文件路径时的文件夹字符数和一个"\"
ListBox1.Items.Remove(s)'用截取的字符串代替原来的字符串
但是运行之后发现只有后面大概1/5的成功去掉文件夹名,其余都是原样,并且第一项和最后一项变成空白。是哪里出错了?怎么改嘞?如果有更好的方法,请不吝赐教!

是你的思路一开始就偏了,导致后面不好处理!获取目录下的文件列表,有3种方法,其实都差不多,只是可能后期的处理需求不同用不同的类来实现。
第一种方法:
'读取D:\Temp目录下所有文件完整路径名称
Dim pathArray As String() = IO.Directory.GetFiles("D:\Temp")
'历遍文件完整路径
For Each path As String In pathArray
'获取完整路径下的文件名称,添加到ListBox1
ListBox1.Items.Add(IO.Path.GetFileName(path))
Next

第二种方法:
'读取D:\Temp目录下所有文件完整路径名称
Dim pathArray As String() = IO.Directory.GetFiles("D:\Temp")
'历遍文件完整路径
For Each path As String In pathArray
'根据文件完整路径新建FileInfo文件信息对象
Dim info As New IO.FileInfo(path)
'获取文件名称,添加到ListBox1
ListBox1.Items.Add(info.Name)
Next

第三种方法:
'读取D:\Temp目录下所有文件完整路径名称
Dim pathArray As String() = IO.Directory.GetFiles("D:\Temp")
'历遍文件完整路径
For Each path As String In pathArray
'根据文件完整路径新建DirectoryInfo目录信息对象
Dim info As New IO.DirectoryInfo(path)
'获取文件名称,添加到ListBox1
ListBox1.Items.Add(info.Name)
Next

普通应用,第一种就可以。
用FolderBrowserDialog操作的话,把"D:\Temp"换成 FolderBrowserDialog.SelectedPath追问

谢谢谢谢,不过经过我无数次的调试,我用Mid函数也成功了。你的方法很简洁,还是改用你的吧。

参考技术A vb.net截取一段路径中的文件名的话直接用这个函数即可

My.Computer.FileSystem.GetFileName(path)

其中path就是完整的路径。

例如:Dim myStr As String = My.Computer.FileSystem.GetFileName("C:\1.vb")
那么 myStr 就是 1.vb。

不要用Mid什么的了,太麻烦还容易出错。追问

我添加文件的方法是ListBox1.Items.AddRange(IO.Directory.GetFiles(FolderBrowserDialog1.SelectPath))用你的方法怎么改?

追答

把 IO.Directory.GetFiles(FolderBrowserDialog1.SelectPath).ToString 当作参数传进去呀

参考技术B 你的mid函数用错了,用left函数,用Microsoft.VisualBasic.Left引用。同时i要从0开始计数,listbox的index是从0开始的,最后你的ListBox1.Items.Count要减一,所以你的第一个和最后一个有问题。

VB 中如何点一下按钮,让listbox中选中的某一列复制到另外的listbox中,不是vb.net

类似这样,选中左边,然后点按钮,到右边

你说的一列是指一行(或者说一项)吗?

Private Sub Command1_Click()
If List1.ListIndex > -1 Then List2.AddItem List1.Text
End Sub

以上是把List1选中的一项复制到List2中追问

为什么我试了下,list2中不显示呢

追答

首先,窗体中List1、List2、Command1这三个控件缺一不可,而且List1必须有选项,List2可以空白。

其次,要先在List1用鼠标左键点中一项(蓝底白字),再点Command1。
如果这样List2还没有显示,我删帐号……

参考技术A listbox中可以选中一列?追问

为什么不能,就是用鼠标选中啊,

就是把1,复制到右边

追答

你怎么列与行都分不清?

Private Sub Command1_Click()
Dim i As Integer
For i = 0 To List1.ListCount - 1
If List1.Selected(i) Then
List2.AddItem List1.List(i)
Exit For
End If
Next i
End Sub

追问

为什么list2中不显示,我就纳闷了

以上是关于vb.net高手帮忙看一下这个从listbox中截取字符串的代码哪里不对的主要内容,如果未能解决你的问题,请参考以下文章

在VB.net中,如何把listbox中的数值进行排序

关于VB.NET2005中dataGridView的问题

VB.NET Listbox1控件

VB.NET Listbox1控件

vb.net如何在listbox中增加双击事件?

一段程序看不懂,高手帮忙读一下