⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filelistdialog.vb

📁 Pocket Image Editor v0.1源码(.NET源码)
💻 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 + -