所以我试图用2个按钮制作一个列表框。 列表框应该显示特定文件夹中的文件(我回到这里) 这两个按钮应该被称为“Set ..”(在set目录中) 和更新(因为列表将刷新(每次Windows窗体运行时我都会做的事。
截至目前,当我启动应用程序并转到带有列表框的表单时,列表框为空。当按下“更新”时,列表框从我的Harddrive上的地址中选取文件(所以这是我代码中的静态地址)。
它还会找到7种不同的扩展名(文件类型),并正确列出所有这些扩展名。
我的问题如下,我希望设置按钮在首次运行时为用户打开文件对话框,因此用户自己可以选择程序“索引或搜索”的文件夹,如果你愿意的话。然后当他再次运行应用程序并找到列表框时,他只能按下更新,列表框会显示他上次选择的文件夹的内容。
Set - 按钮现在我的代码中没有做任何事情。
第二,我希望每种文件类型都用特定颜色标记或着色。
像; .txt应为蓝色,.jpg为红色,等等。
如果有帮助,请运行Visual Studio 2013。
此外,在检查我的代码时,如果您有任何建议,我如何改进代码,使其更容易,更短,只是为了避免重复代码而改变,请告诉我。
这是来自VS2013中的设计
代码:
Private Sub Form_Load(sender As Object, e As EventArgs) Handles Me.Load
FolderBrowserDialog1.SelectedPath = "xxx\xxx\xxx\xxx"
System.IO.Directory.GetCurrentDirectory()
Private Sub updateButtonGame_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles updateButtonGame.Click
If FolderBrowserDialog1.SelectedPath = "xxx\xxx\xxx\xxx" Then
ListFiles(FolderBrowserDialog1.SelectedPath)
End If
End Sub
Private Sub ListFiles(ByVal folderPath As String)
filesListBox.Items.Clear()
Dim fi = From f In New IO.DirectoryInfo(FolderBrowserDialog1.SelectedPath).GetFiles().Cast(Of IO.FileInfo)() _
Where f.Extension = ".z64" OrElse f.Extension = ".nds" OrElse f.Extension = ".BIN" OrElse f.Extension = ".smc" OrElse f.Extension = ".ISO" OrElse f.Extension = ".nes" OrElse f.Extension = ".gb"
Order By f.Extension
Select f
For Each fileInfo As System.IO.FileInfo In fi
filesListBox.Items.Add(fileInfo.Name)
Next
End Sub
另一件事,这是更可选的..
我的列表是全黑的,所以我选择将列表框中的“项目”变为浅灰色。
我玩了一些名为e.Graphics的东西,希望实现Coloring一个特定的文件类型,并且它将所有项目变为黑色,红色或我所说的任何东西。 但删除代码后,所有项目将变为与列表框的背景颜色相同的颜色。所以我再也看不到实际存在的元素,除了侧面弹出的滚动条(因为我选择的文件夹中有很多项目)
此外,我对编码/视觉工作室还不是很好,因为我在1周前就开始了。 从VB 2010开始,然后去VS2013,看看我是否设法修复了一些问题,也与List Box有关。
如果我解释得很差,请告诉我,我会更新更新信息。 Project也首先在VB 2010中创建,然后在VS 2013中“迁移”或打开。
答案 0 :(得分:3)
更好,更好的方法是使用ListView
和ImageList
在列表中添加文本,图像,PDF等标准图像,然后为每个设置图像键将它们添加到列表中的项目。
或者,您可以在列表框中模拟相同的内容(使用OwnerDrawFixed
)来绘制指定的图像以指示文件类型。实现这一点的一个非常好的方法是使用类似于下面的代码ExtenderProvider
作为起点。作为EP,您可以将任何cbo或列表框链接到图像列表,以提供与ListView
非常相似的图像提示:
您经常看不到您的彩色项目的原因是,您选择的任何颜色在所有系统上看起来都不正确。颜色越多,他们就越不可能拥有足够的对比度,使用用户的颜色方案可读性等。您也不需要“图例”来解释颜色的含义 - 图像是自我解释的。也就是说,DrawItem
代码将是这样的:
注意:列表框控件设置为OwnerDrawFixed
,ItemHeight
= 16
Private Sub lb_DrawItem(sender As Object,
e As DrawItemEventArgs) Handles lb.DrawItem
Dim TXT As Color = Color.Black
Dim JPG As Color = Color.Green
Dim PDF As Color = Color.Blue
Dim EXE As Color = Color.Gray
Dim SEL As Color = SystemColors.HighlightText
Dim thisColor As Color = Color.Orange
Dim ndx As Integer = e.Index
' isolate ext ans text to draw
Dim text As String = lb.Items(ndx).ToString()
Dim ext As String = System.IO.Path.GetExtension(text).ToLowerInvariant
' dont do anything if no item being drawn
If ndx = -1 Then Exit Sub
' default
e.DrawBackground()
' color selector
Select Case ext
Case ".jpg"
thisColor = JPG
Case ".txt"
thisColor = TXT
Case ".exe"
thisColor = EXE
Case ".pdf"
thisColor = PDF
End Select
' override color to use default when selected
If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
thisColor = SEL
End If
' render the text
TextRenderer.DrawText(e.Graphics, text, lb.Font, e.Bounds,
thisColor, TextFormatFlags.Left)
' default
e.DrawFocusRectangle()
End Sub
结果:
适用于我的系统 TM