User 9897074 Ответов: 2

Программы файлы, папки меню!


Привет..я хотел бы перечислить все файлы и папки меню запуска во всплывающем меню!!
Это трудно?

Что я уже пробовал:

Я не нахожу много такого в google!!!
Я знаю, что мне, возможно, придется искать папку, а затем применять команды, чтобы dir перечислялся в меню!! Ну, я не очень хорошо знаю, как это сделать!!!

Спасибо!

я использую этот код:
Dim patQ = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim di = New DirectoryInfo(patQ)
Dim rgFiles = di.GetFiles("*.*")
For Each fi As FileInfo In rgFiles
	Pool.ContextMenuStrip2.Items.Add(fi.Name.ToString.Replace("\" & fi.Name, ""))
Next

это список всех файлов в моей папке документов..я хотел бы перечислить все файлы, папки и подпапки в aproppriated структуре popupmenu!!

PIEBALDconsult

Самый большой урок, который вам нужно усвоить, - это как разложить задачу на более мелкие задачи.
То, что вы описываете, это:
Получите список файлов меню "Пуск".
Отображение списка во всплывающем меню.
А теперь иди и займись исследованиями.

2 Ответов

Рейтинг:
11

Graeme_Grant

Вот, держи... Загрузка StartMenu во всплывающее меню...

Public Class Form1

    Public Sub New()
        InitializeComponent()

        BuildMenu()
    End Sub

    Private Sub BuildMenu()

        Dim cm = New ContextMenu()
        Dim startMenu = Environment.GetFolderPath( _ 
                            Environment.SpecialFolder.CommonStartMenu)

        BuildMenuLevel(cm, startMenu)
        butStartMenu.ContextMenu = cm

    End Sub

    ' walk through the folder levels and build a menu
    Private Sub BuildMenuLevel(cm As ContextMenu, parentFolder As String, _
                               Optional parentMenu As MenuItem = Nothing)

        Dim folders = IO.Directory.GetDirectories(parentFolder)

        For Each folder As String In folders
            Dim files = IO.Directory.GetFiles(folder)

            Dim menuItems = New List(Of MenuItem)()
            For Each file As String In files
                menuItems.Add(New MenuItem(_
                    IO.Path.GetFileNameWithoutExtension(file), _
                    New EventHandler(AddressOf AppClicked)))
            Next

            Dim folderMenu As MenuItem
            Dim folderName As String = folder.Split("\"c).Last()

            If parentMenu Is Nothing Then
                folderMenu = cm.MenuItems.Add(folderName, menuItems.ToArray())
            Else
                folderMenu = parentMenu.MenuItems.Add(folderName, menuItems.ToArray())
            End If

            BuildMenuLevel(cm, folder, folderMenu)
        Next

    End Sub

    Private Sub butStartMenu_Click(sender As Object, e As EventArgs) _
        Handles butStartMenu.Click

        butStartMenu.ContextMenu.Show(butStartMenu, _
                                      New Point(butStartMenu.Left, butStartMenu.Top))
    End Sub

    Private Sub AppClicked(sender As Object, e As EventArgs)

        ' selected item
        Dim menuItem = TryCast(sender, MenuItem)
        Debug.WriteLine("File: {0}", menuItem.Text)
        Debugger.Break()

    End Sub

End Class

ОБНОВЛЕНИЕ: Как обобщить функцию BuildMenu для работы с любой кнопкой & и папкой каталога:
Private Sub BuildMenu(startMenu as String, destButton as Button)
 
    Dim cm = New ContextMenu()
    BuildMenuLevel(cm, startMenu)
    destButton.ContextMenu = cm
 
End Sub

использовать:
dim startMenuPath as String = Environment.GetFolderPath( _ 
                            Environment.SpecialFolder.CommonStartMenu)
BuildMenu(startMenuPath, butStartMenu)


[no name]

Прежде всего спасибо!
хотя там написано ...доступ запрещен: C:\ProgramData\Microsoft\Windows\Start меню\программы .. я не уверен, в чем проблема

Graeme_Grant

Проверено и работает здесь...

Проверьте свое внутреннее исключение exception & / или тип исключения. Это даст информацию, объясняющую, почему. На первый взгляд, это исключение безопасности - уровень безопасности пользователя недостаточно высок для доступа к папке.

[no name]

у меня также есть еще одна проблема...я не очень хорошо понимаю код..."butStartmenu" - это обычная кнопка, верно? .... а "парентмену" - стрипмену, верно? . это не открывает никакого меню, когда я нажимаю на кнопку?!???!?!?!

извините ...я просто не совсем понимаю это

Graeme_Grant

butStartmenu это обычная кнопка.

BuildMenuLevel меню parentMenu переменная параметра - это MenuItem объект.

Меню инициализируется в конструкторе формы. Вы сделали то же самое?

[no name]

я не вижу, где стрипмену входит в этот код .... :(

[no name]

я не делаю это правильно ... я нажимаю на кнопку, но меню не открывается..

Graeme_Grant

Вы неправильно применяете его к своему приложению. Скачать отсюда: StartMenuVB.zip -Google Диск[^]

[no name]

хорошо, это работает, спасибо... но теперь я не знаю, как обедать файлы оттуда..я использую: Process.Start ("File: {0}", menuItem.Text) .. но не повезло!!!

Graeme_Grant

Этот вопрос сейчас работает и закрыт. Это новый вопрос.

[no name]

оставьте его..я мог бы не использовать его в конце концов.. он дает ошибку (отказано в доступе к папке startmenu)..в любом случае, спасибо за вашу помощь ... я оценил это ... спасибо

Graeme_Grant

Похоже на исключение из правил безопасности. Покопайтесь в ошибке, и информация будет там.

[no name]

Эй, я кручу ваш код, чтобы удовлетворить мои потребности, и у меня есть несколько вопросов по этому поводу ... если это возможно для вас, чтобы занять еще немного вашего времени.-это было бы здорово....
Это новый код:


Дим папки = ИО.Каталог.GetDirectories("C:\")

Для каждой папки в виде строки в папках
Дим файлов = ИО.Каталог.GetFiles (папка)

Дим меню = новый список(пункт меню)()
Для каждого файла в виде строки в файлах
пункт меню.Добавить(новый MenuItem(ИО.Путь.GetFileNameWithoutExtension(файл)))
Следующий

Тусклый folderMenu как MenuItem
Dim folderName As String = folder.Split ("\"c). последний()
Бассейн.ContextMenuStrip2.Предметы.Добавить(имя папки)
Следующий

что мне нужно изменить, чтобы в меню отображались подпапки и файлы??

Не могли бы вы снова занять немного своего времени ???

Graeme_Grant

Вы не. Установите верхнее или корневое меню в BuildMenu и он сделает всю работу за вас.

[no name]

ну, я хочу добавить 3 из них..3 кнопки, которые открывают разные меню с разными папками..я не знаю, как интегрировать ваш код для того, чтобы сделать это... так что было бы здорово иметь решение, используя мой последний опубликованный код!!!

Graeme_Grant

Сделано. См. раздел Обновление в решении. В этом действительно нет ничего сложного.

[no name]

арргггг.. извините, что я этого не понимаю...наверное, я слишком хромаю для этого :(

Graeme_Grant

Передайте папку и кнопку исправленному BuildMenu sub и он прикрепит всплывающее окно структуры меню (папка и файл) к переданной кнопке, например:
Скрыть   скопировать код

BuildMenu("c:\\MyRootFolder", MyCustomPathPopupButton)

Затем, как и в коде, который вы скачали, подключите событие click MyCustomPathPopupButton чтобы показать всплывающее окно:
Private Sub MyCustomPathPopupButton_Click(sender As Object, e As EventArgs) _        Handles MyCustomPathPopupButton.Click         MyCustomPathPopupButton.ContextMenu.Show(butStartMenu, _                                      New Point(MyCustomPathPopupButton.Left, butStartMenu.Top))
End Sub

Простой.

[no name]

ОК должно быть что то вроде этого верно:

Общественные Саб Новый()
метод InitializeComponent()
Dim startMenuPath As String = Environment.GetFolderPath(
Окружающая среда.Специальная папка.Мои документы)
BuildMenu(startMenuPath, butStartMenu)
Конец Подводной Лодки

Частная суб BuildMenu(меню в виде строки, destButton как кнопка)

Dim cm = новое контекстное меню()
BuildMenuLevel(см, меню)
destButton.Контекстное меню = см

Конец Подводной Лодки

но я возвращаю ошибку отказа в доступе, когда пытаюсь использовать "C:\" для eg.

Graeme_Grant

Посмотрите на тип исключения и остальную информацию об исключении в окне отладки locals. Это исключение безопасности UAC.

Я ответил на первоначальный вопрос и ответил на "расширенные" вопросы + запрос на образец кода. Теперь пришло время поиграть с ним, установить точки останова и учиться. Я закрываю это дело... удачи.

[no name]

хорошо...большое спасибо за ваше время и знания...Спасибо!

[no name]

нет...я не понимаю...это было трудно для меня ... прости...

Рейтинг:
0

OriginalGriff

Попробовать это:

string startMenu = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu);
(это было добавлено в .NET 4.0, поэтому, если вы используете более низкую версию, вам нужно будет использовать Win32 API Функция SHGetSpecialFolderPath (Windows)[^], которые будут подключаться и работать больше и атрибута DllImport:
[DllImport("shell32.dll")]
static extern bool SHGetSpecialFolderPath(IntPtr hwndOwner,
   [Out] StringBuilder lpszPath, int nFolder, bool fCreate);


[no name]

аррггг!! это не работает...я действительно хотел бы получить кусок кода для этого...что я хочу сделать, так это воссоздать startmenu в моем всплывающем меню...не графический интерфейс ... только папки и файлы внутри.....

Graeme_Grant

"Не работать"... Это то, что вы говорите механику, когда у вас есть проблемы с вашей машиной?

Что такое "не работает"?
Какой код вы пробовали до сих пор, который "не работает"?

Вы хотите, чтобы мы поделились с вами кодом, но ничего не предлагаете взамен, кроме неясности и требований. Переосмыслите, как вы подходите к коллегам-разработчикам, которые отдают свое свободное время, чтобы помочь другим. Нам не платят и мы не обязаны помогать вам.

[no name]

я считаю, что вы сошли с ума ... никто ничего не требует...я просто прошу о помощи!
Забудь это..

Graeme_Grant

Нет, не сумасшедший.

FWIW, ответ OriginalGriff - это отправная точка - это "корневое" местоположение для того, что вы ищете. Получите возвращенный адрес папки, откройте Проводник и перейдите к нему. Вот увидишь...

[no name]

нет man..my проблема немного в другом...я могу перечислить файлы и папки(но не подкаталоги) во всплывающем меню..с фрагментами из google..но это не работает, потому что я не могу "объединить" их..или я перечисляю файлы или перечисляю папки..и некоторые коды из google дают мне ошибку отказа в доступе к специальной папке "commonStartup"...вот почему я сказал, что мне нужен кусок кода для этого..потому что я не могу понять это самостоятельно...

Graeme_Grant

Тогда опубликуйте свой код. Нажмите на виджет "улучшить вопрос".

[no name]

хорошо ... отправлено...

[no name]

я также хотел бы получить доступ к файлам и папкам из всплывающего меню!!!