【发布时间】:2014-11-06 14:53:36
【问题描述】:
所以我正在尝试制作一个带有 2 个按钮的列表框。 列表框应该显示来自特定文件夹的文件(我回到这个) 并且这两个按钮应该被称为“设置..”(在设置目录中) 和更新(因为列表将被刷新(我每次 Windows 窗体运行时都会做的事情。
所以到目前为止,当我启动我的应用程序并转到带有列表框的表单时,列表框是空的。当按下“更新”时,列表框会从位于我的硬盘驱动器上的地址中提取文件(所以这是位于我的代码中的静态地址)。
它还找到 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 的东西,希望能够为特定的文件类型着色,它把所有的项目变成黑色、红色,或者我把它变成的任何东西。 但是去掉代码后,所有的Item都变成了和Listbox的Background颜色一样的颜色。所以我再也看不到实际存在的元素,除了侧面弹出的滚动条(因为我选择的文件夹中有很多项目)
另外,我还不太擅长编码/视觉工作室,因为我大约在 1 周前开始工作。 从 VB 2010 开始,然后去 VS2013 看看我是否设法解决了一些问题,也与列表框有关。
如果我解释得不好,请告诉我,我会更新更好的信息。 项目也是首先在 VB 2010 中创建的,然后在 VS 2013 中“迁移”或打开。
【问题讨论】:
-
列表框必须是
OwnerDraw,并使用DrawItem来根据需要更改每个项目的背景色。 -
OwnerDraw?固定还是可变?他们是我在这里得到的两个选择。我以前在 Normal 上使用它,但是当我尝试 e.Graphics 解决方案时,它写道我必须将其更改为 OwnerDrawFixed。当您说 Backcolor 时,您是指每个项目的文本颜色,还是文本周围的颜色?
-
仔细查看您在
e中看到的丰富 参数集。此外,您可能还想查看一些其他拥有 ListViews 的帖子。 (通常比 ListBox 更好的选择,顺便说一句)。这里有几个链接:A nice ListView,或this 或that one.. -
你说你想要它们
to be labeled or colored with a specific color', I dont know if that means fore or backcolor. You probably want OwnerDrawFixed as log as each item is the same size, otherewise do as TaW suggests and examinee`,它会告诉你当前正在绘制哪个项目。用它来确定颜色。 -
对不起,我在考虑前色,因为它被称为。它实际上可以是任何一个,只要它将它们分开即可。假设您在该列表中有 10.txt 文件和 15.jpg 文件,然后我希望能够将 .txt 文件设置为具有前色或背景色为红色或其他任何颜色,然后将 .jpg 设置为不同的颜色,因此您可以轻松滚动并查看内容。如果您有分步指南或一些代码来指导我,请发布它,因为我是空白的。我不知道如何进行。我已经启动并运行了列表视图,它可以找到我想要的文件。