Страница: 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-сайт:
Профиль | | #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-сайт:
Профиль | | #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-сайт:
Профиль | | #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-сайт:
Профиль | | #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 когда речь идет о NET!? А он наверняка пытается запустить Ваш код в своем проекте. Почему в таком случае не дать ему код на VBA или дельфях каких нибудь!? Пусть попробует, вдруг он в НЕТ запустится..
В третьих. Запускать файл в НЕТ через ShellExecute - это, мягко говоря, извращение!
В четвертых. На цивилизованных форумах(имхо) приводят корректный код на соответствующем языке по возможности с комментариями. И не зная возможностей платформы не приводят код из другого языка, который совершенно неуместен в контексте вопроса.
В пятых. Если мои слова Вас обидели или задели - приношу извенения.
Номер ответа: 10
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #10
Добавлено: 23.01.08 00:03
Смею сообщить, что если правильно указать имя менюшки, то мой код, вероятно, заработает и в дотнете. Не уверен, но все же, насколько я знаю, обработчики событий в vb.net и vb6 очень похожи...
Номер ответа: 11
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #11
Добавлено: 23.01.08 00:47
Александр
Твое решение с меню, никуда не годится.
Исползуй tree. Это и красивее и логичнее и удобнее.
Хотя бы свернуть можно
И читаем по поводу делегатов и обработчиков событий в НЕТ.
Executioner
Неа Не угадал.
ника
Грамотный разгром
Только вот беда, нетчики в основном на шарпе сидят Он под эту платформу создавался, потому и самый удобный. Фактически при всем многоообразии ( а я попробовал Дельфи, управляемый Си, Бейсик, Джаву) писать удобно только на шарпе.
//--------
Ты я вижу фанатка
Ну да тормозит Да еще как.
Нельзя увы, даже на сегодняшнем этапе создать универсальную модель управления памятью. А потому автколлектор, перекушав недозрелого ООП сильно .... капризничает
Номер ответа: 12
Автор ответа:
ника
Вопросов: 1
Ответов: 111
Профиль | | #12
Добавлено: 23.01.08 01:57
Executioner:
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("irectory '{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. страдает русский язык от безграмотности. Когда уже люди поймут, что "вас" следует писать с маленькой буквы? Правда ника?