我正在创建一个应用程序启动器 - 它基本上是一个ListView,其中包含一组快捷方式文件(即与快捷方式相关联的图像,文本是快捷方式的名称)。这一切都很好,花花公子,除了我想做的最后一件事。列表视图中显示的应用程序存储在xml文件中,我要做的是按照它们在xml文件中出现的顺序将应用程序添加到列表视图中,即这可能不是按字母顺序排列的。
所以我从xml文件中读取了一个app name,找到了它的快捷方式lnk文件,从文件中提取图标并将其添加到Listview中;使用:
lvPrograms.LargeImageList = ProgramIcons
Dim item As ListViewItem
Dim FileName = Path.GetFileNameWithoutExtension(shortcutFile.Name)
item = New ListViewItem(FileName, 1)
item.ImageKey = FileName
iconFile = System.Drawing.Icon.ExtractAssociatedIcon(shortcutFile.FullName)
ProgramIcons.Images.Add(FileName, iconFile)
lvPrograms.Items.Add(item)
我还将listView的Sorting属性设置为None
当代码添加了所有应用程序时,我希望它们按照我添加的顺序显示,但它似乎只是按随机顺序添加它们,即...不是我的订单或升序或降序?!< / p>
如果我在调试窗口中检查lvPrograms.Items(X).Text的内容,那么(0)不是我添加的第一个,(6)不是我添加的第七个?!
希望这是有道理的,有人可以帮助我按照我添加的顺序列出应用程序吗?
干杯,
克里斯。
Extra Info要求我的Plutonix:
基本上我的xml被读入一个名为UserAppSettings的对象,该对象具有一组Application对象及其Name属性(如果应用程序的名称)。 ProgramDetails也是一个结构,它包含有关快捷方式的各种属性 - 名称,工作文件夹等
图像列表(如果相关的是32位和16位深度)
lvPrograms.Clear()
ProgramIcons.Images.Clear()
ProgramIconsSmall.Images.Clear()
lvPrograms.LargeImageList = ProgramIcons
lvPrograms.SmallImageList = ProgramIconsSmall
Dim dir As New System.IO.DirectoryInfo(userShortcutsFolder)
lvPrograms.BeginUpdate()
lvPrograms.Sorting = SortOrder.None
Dim shortcutFile As FileInfo
For Each AppToShow As Application In UserAppSettings.Applications
shortcutFile = New FileInfo(userShortcutsFolder + AppToShow.Name + ".lnk")
addShortcutToListView(shortcutFile)
Next
Private Sub addShortcutToListView(shortcutFile As FileInfo)
Dim CurrentProgram As ProgramDetails
Dim item As ListViewItem
CurrentProgram = New ProgramDetails
With CurrentProgram
.FullName = shortcutFile.FullName
.Name = shortcutFile.Name
.NameWithoutExtension = Path.GetFileNameWithoutExtension(shortcutFile.Name)
item = New ListViewItem(.NameWithoutExtension, 1)
.Icon = System.Drawing.Icon.ExtractAssociatedIcon(.FullName)
getShortcutProperties(CurrentProgram)
ProgramIcons.Images.Add(.NameWithoutExtension, .Icon)
ProgramIconsSmall.Images.Add(.NameWithoutExtension, .Icon)
item.ImageKey = .NameWithoutExtension
End With
item.Tag = CurrentProgram
lvPrograms.Items.Add(item)
' MsgBox(item.Text + vbNewLine + lvPrograms.Items(lvPrograms.Items.Count - 1).Text)
End Sub