Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для Nachrichter
649 / 601 / 92
Регистрация: 19.03.2012
Сообщений: 1,128

Открытие папок в ListBox и переход "назад"

29.03.2012, 18:51. Показов 2392. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На форме имеется ComboBox и ListBox. В ComboBox внесены диски компьютера по буквам. При выборе диска его содержимое (все файлы и папки) отображаются в ListBox в виде списка. Вопрос следующий:

Каким образом отобразить содержимое выбранной папки в том же ListBox по двойному щелчку и организовать возврат в список файлов диска? (Аналогично Norton Commander'y, например).
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.03.2012, 18:51
Ответы с готовыми решениями:

Пропали название папок как вернуть назад
Всем привет. У меня появилась токая вот проблемка, на 1-ом из дисков пропали название папок, может, кто подскажет, как исправить эту...

Ajax Переход назад
Есть сайт который написан на Ajax. При переходе по странице меняется URL(History API) и меняется контент. Если History API не...

Webbrowser заблокировать переход назад
Приветствую. У компонента webbrowser есть процедура GoBack и GoForward, но если "перемещаться" некуда, то программа выдаёт...

11
Крутой форумчанин
154 / 154 / 8
Регистрация: 09.01.2011
Сообщений: 298
29.03.2012, 22:20
Цитата Сообщение от Nachrichter Посмотреть сообщение
Каким образом отобразить содержимое выбранной папки в том же ListBox по двойному щелчку и организовать возврат в список файлов диска? (Аналогично Norton Commander'y, например).
Использовал ListView (наследование):
0
Крутой форумчанин
154 / 154 / 8
Регистрация: 09.01.2011
Сообщений: 298
29.03.2012, 22:23
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Imports System.IO
Public Class FileListView
    Inherits ListView
    Private _Path As String
 
    Public Sub New()
        Me.View = Windows.Forms.View.Details
        Me.Columns.Add("FileName", "Имя", 200)
        Me.Columns.Add("Type", "Тип", 50)
        Me.Columns.Add("Size", "Размер", 70)
        Me.Columns.Add("ModifyDate", "Дата", 70)
        Me.Columns.Add("ModifyTime", "Время", 60)
    End Sub
    Public Property Path As String
        Get
            Return _Path
        End Get
        Set(value As String)
            Me.Items.Clear()
            _Path = value
            If _Path = "" Then Exit Property
            Dim di As New DirectoryInfo(_Path)
            For Each d In di.GetDirectories
                Dim i As ListViewItem
                i = Me.Items.Add("[" & d.Name & "]") 'Имя
                i.SubItems.Add("") 'Тип
                i.SubItems.Add("<DIR>") 'Размер
                i.SubItems.Add(d.LastWriteTime.ToShortDateString) 'Дата
                i.SubItems.Add(Format(d.LastWriteTime, "hh:mm:ss")) 'Время
            Next
            For Each f In di.GetFiles
                Dim i As ListViewItem
                i = Me.Items.Add(System.IO.Path.GetFileNameWithoutExtension(f.Name))
                i.SubItems.Add(f.Extension)
                i.SubItems.Add(f.Length)
                i.SubItems.Add(f.LastWriteTime.ToShortDateString)
                i.SubItems.Add(f.LastWriteTime.ToLongTimeString)
            Next
        End Set
    End Property
 
End Class
1
 Аватар для Nachrichter
649 / 601 / 92
Регистрация: 19.03.2012
Сообщений: 1,128
30.03.2012, 15:24  [ТС]
cergew, благодарю, сейчас потестим...
0
Крутой форумчанин
154 / 154 / 8
Регистрация: 09.01.2011
Сообщений: 298
30.03.2012, 16:03
Цитата Сообщение от Nachrichter Посмотреть сообщение
cergew, благодарю, сейчас потестим...
Я кстати уже реализовал... Как бы сказать... связанность со второй панелью, "заход" в папку и выход на уровень выше по "..", если надо - поделюсь.
1
Крутой форумчанин
154 / 154 / 8
Регистрация: 09.01.2011
Сообщений: 298
30.03.2012, 16:22
Связанность списков нужна для того, чтобы была удобная возможность получить путь и скопировать/переместить файлы с папками в эту самую соседнюю панель.
1
 Аватар для Nachrichter
649 / 601 / 92
Регистрация: 19.03.2012
Сообщений: 1,128
30.03.2012, 19:20  [ТС]
Цитата Сообщение от cergew Посмотреть сообщение
Связанность списков нужна для того, чтобы была удобная возможность получить путь и скопировать/переместить файлы с папками в эту самую соседнюю панель.
Вот это и требуется в итоге, буду признателен за пример реализации!
0
Крутой форумчанин
154 / 154 / 8
Регистрация: 09.01.2011
Сообщений: 298
30.03.2012, 20:27
Для удобства при дальнейшей работе с файлами, я записывал в FileListView.Item.Tag (в тэг) FileInfo и DirectoryInfo, получилось очень удобно. Соответственно, и "заходить" в папку тоже удобно, ну и "запускать" файл через Process.Start тоже шикарно.
1
 Аватар для Nachrichter
649 / 601 / 92
Регистрация: 19.03.2012
Сообщений: 1,128
30.03.2012, 20:57  [ТС]
А можно взглянуть на код реализации?
0
Крутой форумчанин
154 / 154 / 8
Регистрация: 09.01.2011
Сообщений: 298
02.04.2012, 10:35
Цитата Сообщение от Nachrichter Посмотреть сообщение
взглянуть на код
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
Imports System.IO
Public Class FileListView
    Inherits ListView
    Private _Path As String
 
    Public Property ConnectedFileListView As FileListView 'связанный FileListView (как во всех "коммандерах", вторая панель)
 
    Public Sub New()
        Me.MultiSelect = True 'возможно "выбрать" несколько элементов
        Me.View = Windows.Forms.View.Details 'выставляем самый удобный вид
        Me.Columns.Add("FileName", "Имя", 200) 'Имя файла
        Me.Columns.Add("Type", "Тип", 50) 'Тип (расширение)
        Me.Columns.Add("Size", "Размер", 70) 'размер
        Me.Columns.Add("ModifyDate", "Дата", 70) 'дата последней правки файла
        Me.Columns.Add("ModifyTime", "Время", 60) 'время последней правки файла
    End Sub
 
    Public Property Path As String
        Get
            Return _Path
        End Get
        Set(ByVal value As String)
            'установлен новый путь к текущей папке
            Me.Items.Clear() 'сперва удаляем все элементы списка
 
            If value = "" Then 'если новое значение пустое, то
                _Path = value 'сохраняем в локальную переменную пустой путь
                Exit Property 'и уходим
            Else
                'если новое значение нормальное, то заполняем список сперва папками, потом файлами
                Dim di As New DirectoryInfo(value)
                Dim i As ListViewItem
 
                'когда возможно, самый первый будет элемент "..", который позволит пользователю подняться на уровень выше
                If Not IsNothing(di.Parent) Then
                    i = Me.Items.Add("..") 'добавляем его
                    i.Tag = di.Parent 'записываем в тэг элемента вышестоящий каталог
                    Me.FocusedItem = i
                End If
 
                For Each d In di.GetDirectories 'папки
                    i = Me.Items.Add("[" & d.Name & "]") 'Имя
                    i.Tag = d 'для дальнейшего удобства кидаем "текущую папку" в тэг
                    i.SubItems.Add("") 'Тип
                    i.SubItems.Add("<DIR>") 'Размер, в него пишем <DIR>, как у тотала
                    i.SubItems.Add(d.LastWriteTime.ToShortDateString) 'Дата
                    i.SubItems.Add(Format(d.LastWriteTime, "hh:mm:ss")) 'Время
                Next
                For Each f In di.GetFiles 'файлы
                    i = Me.Items.Add(System.IO.Path.GetFileNameWithoutExtension(f.Name))
                    i.Tag = f 'для дальнейшего удобства кидаем "текущий файл" в тэг
                    i.SubItems.Add(f.Extension) 'тип (расширение)
                    i.SubItems.Add(f.Length) 'размер
                    i.SubItems.Add(f.LastWriteTime.ToShortDateString) 'дата
                    i.SubItems.Add(Format(f.LastWriteTime, "hh:mm:ss")) 'время
                Next
                _Path = value
            End If
        End Set
    End Property
 
    Public Sub Fill()
 
    End Sub
 
    Private Sub FileListView_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        'что происходит при нажатии клавиши
        If IsNothing(Me.FocusedItem) Then Exit Sub 'если фокус не установлен - выходим
        Select Case e.KeyCode
            Case Keys.Enter ' нажатие на ENTER, нужно "войти" (в папку/файл)
                Select Case Me.FocusedItem.Tag.GetType.Name
                    Case "DirectoryInfo"
                        Dim CurrentDir As DirectoryInfo
                        CurrentDir = Me.FocusedItem.Tag
                        Me.Path = CurrentDir.FullName
                    Case "FileInfo"
                        Dim CurrentFile As FileInfo
                        CurrentFile = Me.FocusedItem.Tag
                        Process.Start(CurrentFile.FullName)
                End Select
            Case Keys.F5 'копировать
                CopySelectedFiles()
        End Select
    End Sub
 
    Private Sub CopySelectedFiles()
        'Метод копирует все выбранные файлы/каталоги в папку, открытую в связанном FileListView
        Dim Item As ListViewItem
        For Each Item In Me.SelectedItems
            Select Case Item.Tag.GetType.Name
                Case "DirectoryInfo"
                    Dim CurrentDir As DirectoryInfo
                    CurrentDir = Item.Tag
                    MsgBox(CurrentDir.FullName)
                    MsgBox(Me.ConnectedFileListView.Path)
                Case "FileInfo"
                    Dim CurrentFile As FileInfo
                    CurrentFile = Item.Tag
                    FileCopy(CurrentFile.FullName, System.IO.Path.Combine(Me.ConnectedFileListView.Path, CurrentFile.Name))
            End Select
        Next
    End Sub
End Class
2
Крутой форумчанин
154 / 154 / 8
Регистрация: 09.01.2011
Сообщений: 298
02.04.2012, 10:38
Обратите внимание - для работы "копирования" - необходимо выставить свойство ConnectedListView
2
 Аватар для Nachrichter
649 / 601 / 92
Регистрация: 19.03.2012
Сообщений: 1,128
03.04.2012, 19:37  [ТС]
cergew, спасибо большое за помощь! Надо потестить, потом напишу, если вопросы будут.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.04.2012, 19:37
Помогаю со студенческими работами здесь

Переход страниц назад/вперед
Есть документ в бордере &lt;ItemsControl ScrollViewer.PanningMode=&quot;Both&quot; ...

Переход назад и обновление страницы
Добрый вечер. Вот моя кнопка перехода на предыдущую страницу: &lt;a href = &quot;javascript:history.back()&quot;&gt;Назад&lt;/a&gt; Но с...

Переход из фрагмента назад в activity
Всем привет! Может кто сталкивался в такой задачей. Есть activity из него переходим во фрагмент. Как осуществить переход из фрагмента...

Открытие стороннего сайта и возвращение назад
На одном сайте встретил следующее. Открыв сайт, через какое то время, пожалуй через js, открылась вторая вкладка и тут же пользователь...

Переход от одной строчки скрипта к другой назад
Пишу одну программу проверки пароля. Нужно, чтобы если что-то не выполнилось, код возвращался на строчку до. Почему не цикл? Есть 2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru