将项目添加到VB.NET ListView并按照添加顺序显示它们

时间:2016-02-01 18:40:33

标签: vb.net image sorting listview

我正在创建一个应用程序启动器 - 它基本上是一个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 

0 个答案:

没有答案