Добавление в меню полосы во время выполнения - PullRequest
0 голосов
/ 29 сентября 2011

ОК. У меня есть список строк (фактически имен файлов), которые я хочу создать в динамическом виде в меню файлов.

Итак, взяв мой список имен файлов, первые полосы кода строки каталога и суффикса файла (для дополнительного вопроса, как я могу объединить две строки удаления в одну?)

List<string> test_ = populate.Directorylist();

        foreach (var file_ in test_)
        {
            int len_ = file_.Length;
            string filename_ = file_.Remove(0, 8);
            filename_ = filename_.Remove(filename_.Length - 4).Trim();


            ToolStripItem subItem = new ToolStripMenuItem(filename_);
            subItem.Click += new EventHandler(populate.openconfig(file_)); //this is my problem line
            templatesToolStripMenuItem.DropDownItems.Add(subItem); 

Так что просто прокручивайте список и каждый раз добавляйте элемент в "templatesToolStripMenuItem".

но мне нужно добавить событие, которое, когда пользователь щелкает элемент, отправляет переменную file_ varible в метод populate.openconfig.

так что добавление элементов работает нормально, как мне добавить обработку событий?

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

Спасибо

Аарон

Так что да, в конце концов, я добавил

subItem.tag = File_
....

then have the event handle to 

 void subItem_Click (object sender, EventArgs e) //open files from menu
        { 
            ToolStripMenuItem toolstripItem = (ToolStripMenuItem)sender;
            string filename_ = toolstripItem.Tag.ToString(); //use the tag field
            populate.openconfig(filename_);
            populate.Split(_arrayLists); //pass read varible dictonary to populate class to further splitting in to sections.
            Populatetitle();//Next we need to populate the Titles fields and datagrid view that users will  enter in the Values
        } 

и только что увидел, как можно привести в порядок немного больше:)

Приветствую вас, ребята, за помощь, просто обожаю, сколько можно шкурить кошку :)

Ответы [ 2 ]

1 голос
/ 29 сентября 2011
List<string> test_ = populate.Directorylist();

        foreach (var file_ in test_)
        {
            int len_ = file_.Length;
            string FullFilename_ = file_.Remove(0, 8);
            string filename_ = FullFilename_.Remove(filename_.Length - 4).Trim();    

            ToolStripItem subItem = new ToolStripMenuItem(filename_);
            subItem.Tag = FullFilename;
            subItem.Click += new EventHandler(populate.openconfig(file_)); //this is my problem line
            templatesToolStripMenuItem.DropDownItems.Add(subItem); 

Затем вы можете получить доступ к свойству Tag из обработчика событий.

void subItem_Click (object sender, EventArgs e)
 {
      ToolStripMenuItem toolstripItem = sender as ToolStripMenuItem;

      if (toolstripItem != null && toolstripItem.Tag != null)
      {
          yourObject.openconfig(toolstripItem.Tag.ToString))
      }
 }

Еще одна вещь, вы можете использовать класс Path для манипуляций с файлами. Существует множество методов для GetFileName, GetFileNameWithoutExtension и т.д ..

string filePath = "C:\diectory\name.txt";
string fileNameWithoutExt = Path.GetFileNameWithoutExtension(filePath);
1 голос
/ 29 сентября 2011

Если я правильно понял, у вас, вероятно, есть этот метод openconfig, который вы хотите иметь возможность реагировать на любой текст.

Метод, который вы передаете как обработчик события, должен иметь форму void MethodName (отправитель объекта, EventArgs e), чтобы вы не могли передать ему строку напрямую.

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

 subItem.Click += new EventHandler(subItem_Click)
 ...
 void subItem_Click (object sender, EventArgs e)
 {
      ToolStripMenuItem toolstripItem = (ToolStripMenuItem)sender;
      yourObject.openconfig(toolstripItem.Text)
 }

Если ваш объект недоступен в этой области, вы можете поместить обработчик событий в ваш объект и сделать то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...