Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2013, 10:02   #1
xxx797
Новичок
Джуниор
 
Аватар для xxx797
 
Регистрация: 05.12.2013
Сообщений: 6
Вопрос Создание контекстного меню из файла.

Здравствуйте Уважаемые эксперты!

Помогите пожалуйста. Проблема в следующем: есть текстовый файл, следующего содержания:

Домашняя страница | Мои ресурсы | my-site.ru
Форум программистов | - | programmersforum.ru
Форум | Мои ресурсы | my-site.ru/forum
Яндекс | Поисковые системы | ya.ru
Рамблер | Поисковые системы | rambler.ru
Гугл | Поисковые системы | google.com

как видим разделяются пункты прямой черточкой, т.е.: Наименование | Группа | Адрес сайта

У меня создано на форме контекстное меню, я хочу чтобы из файла сначала загрузились группы: Мои ресурсы и Поисковые системы, затем загрузились ссылки на ресурсы и раскидались по группам, естественно там где черточка, то эта ссылка должна быть вне группы, в самом низу, примерно так:

Мои ресурсы
Домашняя страница
Форум
Поисковые системы
Яндекс
Рамблер
Гугл
Форум программистов

я уже сделал чтобы создавались группы, сделал чтобы создавались сами ссылки, но не получается, чтобы ссылки раскидались по группам. Т.к. у меня почему-то все группы имеют одно и тоже Name, по имени к ним не обратиться, сделал цикл по названию группы, нужную группу я нахожу, но как получить ее как объект, чтобы в нее засунуть нужные элементы, не знаю, вся надежда на вас, на всякий случай ниже приведу код:

Код:
// для начала мы заполним из файла все группы
            StreamReader sr = new StreamReader(Application.StartupPath + "\\userdata\\profiles\\links.сws", Encoding.GetEncoding(1251));
            while (!sr.EndOfStream)
            {
                ToolStripMenuItem LinksMenuGroup = new ToolStripMenuItem();
                string line = sr.ReadLine();

                if (line.Split('|')[1].Trim() != "-") // проверим, что у этой закладки группа существует
                {
                    int Col = vrem.Split('|').Length; // подсчитаем кол-во элементов массива "vrem"
                    for (int i = 0; i < Col; i++) // пробежимся по массиву, если группа в тек.строке есть в массиве, то отметим это
                    {
                        if (line.Split('|')[1].Trim() == vrem.Split('|')[i])
                        {
                            yes_group = true;
                        }
                        else
                        {
                            yes_group = false;
                        }
                    }

                    if (yes_group == false) // если такая группа уже была создана, то повторно ее не создаем
                    {
                        LinksMenuGroup.Name = "LinksGroup";
                        LinksMenuGroup.Text = line.Split('|')[1].Trim();
                        nf_mnu_links.DropDownItems.Add(LinksMenuGroup);
                    }

                    if (vrem == "") // забиваем массив "vrem" уже созданными группами
                    {
                        vrem = vrem + line.Split('|')[1].Trim();
                    }
                    else
                    {
                        vrem = vrem + "|" + line.Split('|')[1].Trim();
                    }
                }
            }
            sr.Close();

            // создадим в меню закладки
            sr = new StreamReader(Application.StartupPath + "\\userdata\\profiles\\links.сws", Encoding.GetEncoding(1251));
            while (!sr.EndOfStream)
            {
                string line = sr.ReadLine();

                if (line.Split('|')[1].Trim() != "-") // проверим, что у этой закладки группа существует
                {
                    for (int i = 0; i < nf_mnu_links.DropDownItems.Count; i++)
                    {
                        string tek_pos = nf_mnu_links.DropDownItems[i].Text;

                        if (tek_pos == line.Split('|')[1].Trim())
                        {
                            ToolStripMenuItem LinksMenu = new ToolStripMenuItem();
                            LinksMenu.Name = "Links";
                            LinksMenu.Text = line.Split('|')[0].Trim();
                            LinksMenu.Click += new EventHandler(open_links_Click);
                            nf_mnu_links.DropDownItems.Add(LinksMenu);
                        }
                    }
                }
                else
                {
                    ToolStripMenuItem LinksMenu = new ToolStripMenuItem();
                    LinksMenu.Name = "Links";
                    LinksMenu.Text = line.Split('|')[0].Trim();
                    LinksMenu.Click += new EventHandler(open_links_Click);
                    nf_mnu_links.DropDownItems.Add(LinksMenu);
                }

            }
            sr.Close();
xxx797 вне форума Ответить с цитированием
Старый 06.12.2013, 00:07   #2
simples
Форумчанин
 
Регистрация: 03.10.2013
Сообщений: 142
По умолчанию

Имхо, Вы занимаетесь глупостями читая и распарсивая один входной набор данных два(или сколько там еще ниже по коду?) раза и разными алгоритмами.

Вам просто нужно написать парсер этих данных 1(!) раз. И на выход давать(и использовать по коду ниже) уже готовый список объектов с полями "Наименование | Группа | Адрес сайта".
simples вне форума Ответить с цитированием
Старый 06.12.2013, 00:16   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а еще лучше взять завернуть это все в конфиг секцию и не заниматься росписью велосипеда
eval вне форума Ответить с цитированием
Старый 06.12.2013, 08:14   #4
xxx797
Новичок
Джуниор
 
Аватар для xxx797
 
Регистрация: 05.12.2013
Сообщений: 6
По умолчанию

Ну это не совсем велосипед, и у меня задача такая, я уже немного переписал код, сделал по другому и у меня все заработало так как я и хотел, аж душа радуется. Ситуации могут быть разными, и методы решения тоже могут быть разными, в данном случае мне нужно данные получать именно так, и решение я к этому нашел именно такое, согласен что оно может быть слишком сложное для восприятия, может есть способ получше, но главное что все теперь работает, быстро, четко, без сбоев, а это и нужно было. Да и навыки некоторые новые приобрел, что тоже не плохо. Спасибо всем за ответы.
xxx797 вне форума Ответить с цитированием
Старый 06.12.2013, 08:17   #5
xxx797
Новичок
Джуниор
 
Аватар для xxx797
 
Регистрация: 05.12.2013
Сообщений: 6
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
а еще лучше взять завернуть это все в конфиг секцию и не заниматься росписью велосипеда
а про конфиг секцию я не знаю, но надеюсь узнать в ближайшем будущем, я до этого продолжительно долго программировал на Delphi, теперь вот с недавнего времени занялся C# и C++, книжку вот умную скачал Фленова Библия С#, надеюсь поможет мне она.
xxx797 вне форума Ответить с цитированием
Старый 06.12.2013, 11:02   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Фленова Библия С#, надеюсь поможет мне она
и не надейтесь, это тот писатель который не читатель
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подмена контекстного меню собственным окном kangreon Общие вопросы Delphi 3 01.10.2013 11:51
Обработка контекстного меню (Java) guzel20 Помощь студентам 1 16.12.2012 19:12
Не работает локализация для контекстного меню Tolias Общие вопросы .NET 1 23.05.2012 01:51
вызов из контекстного меню Dimarik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 14 12.07.2011 19:03
При создание edit, в режиме run-time, нет стандартного контекстного меню slips Общие вопросы Delphi 6 08.11.2008 17:05