📄 filelistdialog.vb
字号:
'
' Internal implementation of a list of files in a specific folder
' Designed for Smartphone devices
' (c) 2004 Peter Foot, OpenNETCF
'
Imports System
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports System.Windows.Forms
Imports System.IO
Namespace OpenNETCF.Windows.Forms
'/ <summary>
'/ Summary description for FileListDialog.
'/ </summary>
Friend Class FileListDialog
Inherits System.Windows.Forms.Form
Private mnuFile As System.Windows.Forms.MainMenu
Private WithEvents mnuOpen As System.Windows.Forms.MenuItem
Private mnuMenu As System.Windows.Forms.MenuItem
Private mnuOpen2 As System.Windows.Forms.MenuItem
Private WithEvents mnuRename As System.Windows.Forms.MenuItem
Private WithEvents lvFiles As System.Windows.Forms.ListView
'default to all files shown
Private m_filterstring As String = "All Files|*.*"
Private m_filter() As String = {"All Files", "*.*"}
Private m_filterindex As Integer = 1
'default to users documents folder
Private m_path As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal)
Private m_filename As String = ""
Private m_fbd As FolderBrowserDialog
Private clmName As System.Windows.Forms.ColumnHeader
Private clmPath As System.Windows.Forms.ColumnHeader
Private WithEvents mnuCancel As System.Windows.Forms.MenuItem
Private WithEvents mnuChange As System.Windows.Forms.MenuItem
Public Sub New()
'
' Required for Windows Form Designer support
'
InitializeComponent()
'
' TODO: Add any constructor code after InitializeComponent call
'
m_fbd = New FolderBrowserDialog
End Sub 'New
'/ <summary>
'/ Clean up any resources being used.
'/ </summary>
Protected Overloads Sub Dispose(ByVal disposing As Boolean)
m_fbd.Dispose()
MyBase.Dispose(disposing)
End Sub 'Dispose
#Region "Windows Form Designer generated code"
'/ <summary>
'/ Required method for Designer support - do not modify
'/ the contents of this method with the code editor.
'/ </summary>
Private Sub InitializeComponent()
Me.lvFiles = New System.Windows.Forms.ListView
Me.clmName = New System.Windows.Forms.ColumnHeader
Me.clmPath = New System.Windows.Forms.ColumnHeader
Me.mnuFile = New System.Windows.Forms.MainMenu
Me.mnuOpen = New System.Windows.Forms.MenuItem
Me.mnuMenu = New System.Windows.Forms.MenuItem
Me.mnuOpen2 = New System.Windows.Forms.MenuItem
Me.mnuRename = New System.Windows.Forms.MenuItem
Me.mnuChange = New System.Windows.Forms.MenuItem
Me.mnuCancel = New System.Windows.Forms.MenuItem
'
' lvFiles
'
Me.lvFiles.Columns.Add(Me.clmName)
Me.lvFiles.Columns.Add(Me.clmPath)
Me.lvFiles.FullRowSelect = True
Me.lvFiles.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None
Me.lvFiles.Location = New System.Drawing.Point(16, 40)
Me.lvFiles.Size = New System.Drawing.Size(176, 200)
Me.lvFiles.View = System.Windows.Forms.View.SmallIcon
'
' clmName
'
Me.clmName.Text = "Name"
Me.clmName.Width = 160
'
' clmPath
'
Me.clmPath.Text = "Path"
Me.clmPath.Width = 1
'
' mnuFile
'
Me.mnuFile.MenuItems.Add(Me.mnuOpen)
Me.mnuFile.MenuItems.Add(Me.mnuMenu)
'
' mnuOpen
'
Me.mnuOpen.Text = "Open"
'
' mnuMenu
'
Me.mnuMenu.MenuItems.Add(Me.mnuOpen2)
Me.mnuMenu.MenuItems.Add(Me.mnuCancel)
Me.mnuMenu.MenuItems.Add(Me.mnuRename)
Me.mnuMenu.MenuItems.Add(Me.mnuChange)
Me.mnuMenu.Text = "Menu"
'
' mnuOpen2
'
Me.mnuOpen2.Text = "Open"
'
' mnuRename
'
Me.mnuRename.Text = "Rename"
'
' mnuChange
'
Me.mnuChange.Text = "Change Folder"
'
' mnuCancel
'
Me.mnuCancel.Text = "Cancel"
'
' FileListDialog
'
Me.ClientSize = New System.Drawing.Size(218, 315)
Me.ControlBox = False
Me.Controls.Add(lvFiles)
Me.MaximizeBox = False
Me.Menu = Me.mnuFile
Me.MinimizeBox = False
Me.Text = "Open"
End Sub 'InitializeComponent
#End Region
#Region "Public Properties"
'/ <summary>
'/ The name of the selected file.
'/ </summary>
Public ReadOnly Property FileName() As String
Get
Return m_filename
End Get
End Property
'/ <summary>
'/ </summary>
Public Property Filter() As String
Get
Return m_filterstring
End Get
Set(ByVal Value As String)
m_filterstring = Value
Dim filterbuilder As New ArrayList
'split the string and add items to arraylist
Dim filtersection As String
For Each filtersection In m_filterstring.Split("|"c)
'add filter to arraylist
filterbuilder.Add(filtersection)
Next filtersection
m_filter = CType(filterbuilder.ToArray(GetType(String)), String())
'update the file list
RefreshList()
End Set
End Property
'/ <summary>
'/ </summary>
Public Property FilterIndex() As Integer
Get
Return m_filterindex
End Get
Set(ByVal Value As Integer)
If Value <= m_filter.Length / 2 And Value > 0 Then
m_filterindex = Value
'update the listing
RefreshList()
Else
Throw New ArgumentOutOfRangeException("FilterIndex greater than length of Filter collection")
End If
End Set
End Property
'/ <summary>
'/ The folder in which files will be listed.
'/ </summary>
Public Property InitialDirectory() As String
Get
Return m_path
End Get
Set(ByVal Value As String)
If System.IO.Directory.Exists(Value) Then
'set the path
m_path = Value
'reset the list
RefreshList()
Else
'throw an exception
Throw New ArgumentException("The specified path does not exist")
End If
End Set
End Property
#End Region
#Region "Refresh List"
'/ <summary>
'/ Refreshes the list of files for the selected folder.
'/ </summary>
Friend Sub RefreshList()
Cursor.Current = Cursors.WaitCursor
'clear the list
lvFiles.Items.Clear()
'suspend events during updating
lvFiles.BeginUpdate()
'select the filter pointed to by the filterindex
Dim selectedfilter As String = m_filter((m_filterindex * 2 - 1))
'support multiple filetype filters
Dim thisfilter As String
For Each thisfilter In selectedfilter.Split(";"c)
'get all files of specified type in specified folder
Dim filename As String
For Each filename In System.IO.Directory.GetFiles(m_path, thisfilter)
'get info on file
Dim fi As New FileInfo(filename)
'don't add hidden files to the list
If (fi.Attributes And FileAttributes.Hidden) <> FileAttributes.Hidden Then
'create new item with filename minus extension
Dim lviNew As New ListViewItem(New String() {fi.Name.Substring(0, fi.Name.LastIndexOf(".")), fi.FullName})
'add to list
lvFiles.Items.Add(lviNew)
End If
Next filename
Next thisfilter
'disable open menu item when there are no files
If lvFiles.Items.Count = 0 Then
mnuOpen.Enabled = False
Else
mnuOpen.Enabled = True
End If
'restore events to list
lvFiles.EndUpdate()
'set focus to list
lvFiles.Focus()
Cursor.Current = Cursors.Default
End Sub 'RefreshList
#End Region
#Region "Rename Click"
'/ <summary>
'/ Handles when the user clicks the Rename button
'/ </summary>
'/ <param name="sender"></param>
'/ <param name="e"></param>
Private Sub mnuRename_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuRename.Click
'only act if there is currently a selected file
If lvFiles.SelectedIndices.Count = 1 Then
'get current item name
Dim currentname As String = lvFiles.Items(lvFiles.SelectedIndices(0)).Text
'prompt user for new name
Dim newname As String = Microsoft.VisualBasic.Interaction.InputBox("Name:", "Rename file", currentname, 0, 0)
'on ok
If newname <> "" Then
'rename the file (by moving it)
System.IO.File.Move(m_path + currentname, m_path + newname)
End If
End If
End Sub 'mnuRename_Click
#End Region
#Region "Form Resize"
'/ <summary>
'/ Allows the form to dynamically resize.
'/ </summary>
'/ <param name="sender"></param>
'/ <param name="e"></param>
Private Sub FileListDialog_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize
'fill screen with list
lvFiles.Bounds = New Rectangle(-1, -1, Screen.PrimaryScreen.WorkingArea.Width + 2, Screen.PrimaryScreen.WorkingArea.Height + 2)
End Sub 'FileListDialog_Resize
#End Region
#Region "Open Click"
'/ <summary>
'/ Handles user clicking the Open button
'/ </summary>
'/ <param name="sender"></param>
'/ <param name="e"></param>
Private Sub mnuOpen_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuOpen.Click
If lvFiles.SelectedIndices.Count = 1 Then
m_filename = lvFiles.Items(lvFiles.SelectedIndices(0)).SubItems(1).Text
DialogResult = DialogResult.OK
End If
End Sub 'mnuOpen_Click
#End Region
#Region "List Item"
'/ <summary>
'/ Captures selection in the file list
'/ </summary>
'/ <param name="sender"></param>
'/ <param name="e"></param>
Private Sub lvFiles_ItemActivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvFiles.ItemActivate
'only act if there is currently an item selected
If lvFiles.SelectedIndices.Count = 1 Then
m_filename = lvFiles.Items(lvFiles.SelectedIndices(0)).SubItems(1).Text
DialogResult = DialogResult.OK
End If
End Sub 'lvFiles_ItemActivate
#End Region
#Region "Change Click"
'/ <summary>
'/ Handles when user chooses to change the current folder
'/ </summary>
'/ <param name="sender"></param>
'/ <param name="e"></param>
Private Sub mnuChange_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuChange.Click
'create new folderbrowserdialog
m_fbd.SelectedPath = Me.InitialDirectory
'if user selects a new folder
If m_fbd.ShowDialog() = DialogResult.OK Then
'reset the folder to the newly chosen one
InitialDirectory = m_fbd.SelectedPath
'refresh the file list
RefreshList()
End If
End Sub 'mnuChange_Click
#End Region
#Region "Cancel Click"
'/ <summary>
'/ Handles user clicking Cancel - returns with no selection
'/ </summary>
'/ <param name="sender"></param>
'/ <param name="e"></param>
Private Sub mnuCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuCancel.Click
'return with no selection
Me.DialogResult = DialogResult.Cancel
End Sub 'mnuCancel_Click
#End Region
End Class 'FileListDialog
End Namespace
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -