Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: Помогите с меню! Добавлено: 22.01.08 22:00  

Автор вопроса:  Александр
Здравствуйте!
Имеется такой фрагмент кода:
Dim im As New IO.DirectoryInfo(path & "\data\music\")
        Dim im1 As IO.FileInfo() = im.GetFiles()
        Dim ifm As IO.FileInfo
        For Each ifm In im1
            MenuItem8.MenuItems.Add(ifm.ToString)
        Next
Т.е. как видите - в меню добавляются пункты в соответствии с файлами в определенной папке. Теперь вопрос - как запустить из созданного меню эти файлы?
Заранее спасибо!)

Ответить

  Ответы Всего ответов: 22  

Номер ответа: 1
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #1
Добавлено: 22.01.08 22:15
ShellExecute(..., path & "\data\music\" & ifm.ToString, ...)

Ответить

Номер ответа: 2
Автор ответа:
 Александр



Вопросов: 20
Ответов: 44
 Профиль | | #2 Добавлено: 22.01.08 22:31
...помоему я немного неправильно сформулировал вопрос..
Мне нужно событие, по которому будет исполняться открытие файла, т.е. как узнать имя созданного меню и по клику по этому меню уже открывался файл - например ...menuitem(неизвестное значение)_click...

Ответить

Номер ответа: 3
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #3
Добавлено: 22.01.08 22:42
там по индексу будет... menuitem_click(Index as integer)
вроде так

Ответить

Номер ответа: 4
Автор ответа:
 Александр



Вопросов: 20
Ответов: 44
 Профиль | | #4 Добавлено: 22.01.08 23:09
А можно весь пример кода, а то я что-то недогоняю)))

Ответить

Номер ответа: 5
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #5
Добавлено: 22.01.08 23:11
У меня не установлена ни одна студия, держащая дотнет =) Только шестая стоит. Я точно не могу сказать щас.

Ответить

Номер ответа: 6
Автор ответа:
 ника



Вопросов: 1
Ответов: 111


 Профиль | | #6 Добавлено: 22.01.08 23:20
Executioner
Какой menuitem_click(Index as integer)???? ты чего несёшь???
Александр, за такой код надо сразу пальцы ломать, и пока они заживать будут сиди и читай мануалы!!
Зачем ты юзаешь DirectoryInfo, FileInfo когда тебе достаточно воспользоваться перегруженным методом и получить строковый массив в чистом виде! А потом на всех форумах орут, что NET - тормозит.. (((( Вот из за такого кода он и тормозит! Ты в качестве пункта меню добавляешь ПОЛНЫЙ путь к файлу, а если путь будет так символов на 200, и файлов там будет штук 50???? Нехилое у тебя меню выйдет!
Старик, тебя где так кодить учили?
Парни, напишите ему "взрослый" код через AddHandler, а то неохота из за этого VB ставить, а CS он явно не поймет, а смотреть на его код - слезы наворачиваются :-(((

Ответить

Номер ответа: 7
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #7
Добавлено: 22.01.08 23:28
Я сказал как будет в VB6, насчет дотнета я не был уверен, так как не кодю на нем. Только предположил. Меня спросили - я ответил. Мне не важно сколько там будет файлов и какой длины будет путь =)
ты чего несёшь???

Не грубите, пожалуйста, я Вам не грубил. Я миллион раз говорил, что у нас цивилизованный форум =)

Ответить

Номер ответа: 8
Автор ответа:
 Александр



Вопросов: 20
Ответов: 44
 Профиль | | #8 Добавлено: 22.01.08 23:50
Александр, за такой код надо сразу пальцы ломать, и пока они заживать будут сиди и читай мануалы!!

Присоединюсь к Executioner насчет просьбы не грубить. Пункт меню - это не ПОЛНЫЙ путь к файлу, а только лишь название файла. Лучше бы предложили что-нибудь стоящее, чем всем хамить!

Ответить

Номер ответа: 9
Автор ответа:
 ника



Вопросов: 1
Ответов: 111


 Профиль | | #9 Добавлено: 22.01.08 23:53
Я сказал как будет в VB6, насчет дотнета я не был уверен, так как не кодю на нем

Во первых. Вы даже словом не обмолвились, о том что ваш код для VB6.
Во вторых. Зачем ему нужен код на VB6 когда речь идет о NET!? А он наверняка пытается запустить Ваш код в своем проекте. Почему в таком случае не дать ему код на VBA или дельфях каких нибудь!? Пусть попробует, вдруг он в НЕТ запустится..
В третьих. Запускать файл в НЕТ через ShellExecute - это, мягко говоря, извращение!
В четвертых. На цивилизованных форумах(имхо) приводят корректный код на соответствующем языке по возможности с комментариями. И не зная возможностей платформы не приводят код из другого языка, который совершенно неуместен в контексте вопроса.
В пятых. Если мои слова Вас обидели или задели - приношу извенения.

Ответить

Номер ответа: 10
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #10
Добавлено: 23.01.08 00:03
Смею сообщить, что если правильно указать имя менюшки, то мой код, вероятно, заработает и в дотнете. Не уверен, но все же, насколько я знаю, обработчики событий в vb.net и vb6 очень похожи...

Ответить

Номер ответа: 11
Автор ответа:
 vito



Разработчик Offline Client

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #11
Добавлено: 23.01.08 00:47
Александр
Твое решение с меню, никуда не годится.
Исползуй tree. Это и красивее и логичнее и удобнее.
Хотя бы свернуть можно:)
И читаем по поводу делегатов и обработчиков событий в НЕТ.


Executioner
vb.net и vb6 очень похожи...

Неа:) Не угадал.:)

ника
Грамотный разгром:)
Только вот беда, нетчики в основном на шарпе сидят:) Он под эту платформу создавался, потому и самый удобный. Фактически при всем многоообразии ( а я попробовал Дельфи, управляемый Си, Бейсик, Джаву) писать удобно только на шарпе.
//--------
Ты я вижу фанатка:)

А потом на всех форумах орут, что NET - тормозит.. ((((

Ну да тормозит:) Да еще как.:)
Нельзя увы, даже на сегодняшнем этапе создать универсальную модель управления памятью. А потому автколлектор, перекушав недозрелого ООП сильно .... капризничает:)
    

Ответить

Номер ответа: 12
Автор ответа:
 ника



Вопросов: 1
Ответов: 111


 Профиль | | #12 Добавлено: 23.01.08 01:57
Executioner:
Смею сообщить, что если правильно указать имя менюшки, то мой код, вероятно, заработает и в дотнете. Не уверен, но все же, насколько я знаю, обработчики событий в vb.net и vb6 очень похожи...
Глубоко заблуждаетесь...

vito:
Полность согласна. НЕТ тоже не без недостатков.
сильно .... капризничает:)

Прямо скажем - очень деликатно подобрано слово )))

Александр:
vito прав. Использование TreeView в данной ситуации было бы лучшим решением. Но раз тебе так хочется через меню, то вот набросок. На VB я думаю и сам сможешь перевести.
(код для цивилизованного форума:-) )

using System;
using System.Collections;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;

namespace VBNetSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            /**
             * Test addToFileMenuItems void
             *
             * Ищем в директории "Мои документы" все текстовые файлы
             *
             * Предварительно должен быть создан элемент меню с именем stripFiles
             */
            string m_dirPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            addToFileMenuItems(stripFiles, m_dirPath, "*.txt", SearchOption.TopDirectoryOnly);
        }

        /// <summary>
        ///
        /// </summary>
        /// <see cref="http://vbnet.ru/forum/show.aspx?id=159547&tolastpage=true"/>
        /// <param name="parent">Сыылка на родительский элемент меню</param>
        /// <param name="path">Путь к папке с нужными файлами</param>
        /// <param name="searchPattern">Маска поиска</param>
        /// <param name="searchOption">Параметры поиска</param>
        private void addToFileMenuItems(ToolStripMenuItem parent,
                                                   string path,
                                                   string searchPattern,
                                             SearchOption searchOption)
        {
            string[] m_files = null;

            /** Проверка входных аргументов */
            if (parent == null) throw new ArgumentNullException("parent";);
            if (string.IsNullOrEmpty(path))
                throw new ArgumentNullException("path", "Path to directory is null or empty";);
            if (!Directory.Exists(path))
                throw new DirectoryNotFoundException(string.Format(";Directory '{0}' not found.", path));
            
            try
            {
                /** Получаем массив путей */
                m_files = Directory.GetFiles(path, searchPattern, searchOption);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            /** Очищаем родительскую коллекцию  */
            parent.DropDownItems.Clear();

            /** Проверяем что полученный массив не пустой*/
            if (m_files != null && m_files.Length != 0)
            {
                /** Сортируем массив */
                if (m_files.Length != 1) Array.Sort(m_files, new CaseInsensitiveComparer());

                foreach (string m_file in m_files)
                {
                    /** Создаем новый элемент меню*/
                    ToolStripMenuItem m_stripItem = new ToolStripMenuItem(Path.GetFileName(m_file));
                    /** Запоминаем  полный путь к файлу */
                    m_stripItem.Tag = m_file;
                    /** Добавляем картинку файла */
                    m_stripItem.Image = System.Drawing.Icon.ExtractAssociatedIcon(m_file).ToBitmap();
                    /** Добавляем обработчик события Click */
                    m_stripItem.Click += new EventHandler(stripOpenFileClick);
                    /** Добавляем новый элемент к родительскому меню */
                    parent.DropDownItems.Add(m_stripItem);
                }
            }

            /** Блокируем родительский элемент на тот случай, если он пустой */
            parent.Enabled = (parent.DropDownItems.Count != 0);
        }

        /// <summary>
        /// Strip OpenFile nenu items click handler
        /// </summary>
        /// <param name="sender">Элемент меню по которому кликнули</param>
        /// <param name="e"></param>
        private void stripOpenFileClick(Object sender, EventArgs e)
        {
            /** Получаем элемент по которому кликнули */
            ToolStripMenuItem m_stripItem = (ToolStripMenuItem)sender;
            /** Запускаем приложение, ассоциированное с этим файлом */
            Process.Start((string)m_stripItem.Tag);
        }
    }
}

Ответить

Номер ответа: 13
Автор ответа:
 ника



Вопросов: 1
Ответов: 111


 Профиль | | #13 Добавлено: 23.01.08 02:00
Мда... Не ожидала... (((
Скажите, а у Вас ,случайно, нет знакомых программистов, чтоб они сделали для форума нормальную подсветку кода?

Ответить

Номер ответа: 14
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #14 Добавлено: 23.01.08 03:03
форум по басику, а ты С# запостила.. Подстветку для Brainfuck'a не хочешь?

Ответить

Номер ответа: 15
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #15 Добавлено: 23.01.08 03:05
p.s. страдает русский язык от безграмотности. Когда уже люди поймут, что "вас" следует писать с маленькой буквы? Правда ника?

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам