Search code examples
c#menutoolstripmenu

Adding to strip menu at run time


OK I have a list of strings (file names in fact), that i want to create a file menu dynamical form.

So taking my list of file names, first code strips of the directory string and file sufix (for bonus question how can I wrap the two remove lines up in to one ?)

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); 

So simply cycle through the list and add an item to the "templatesToolStripMenuItem" each time.

but I need to add an event that when the user clicks the item, it sends the file_ varible to the populate.openconfig method.

so adding the items works fine, just how do i add the event handling?

I suppose i could send it to a default method that searches for the full file name in the original array and follow it through that way. But surely I can do this as I add the items to the menu bar.

Thank you

Aaron

So yes in the end i added

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
        } 

and just seen how i can tidy that up a bit more :)

Cheers for the help guys, just love how many way you can skin a cat :)


Solution

  • 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); 
    

    Then you can access the Tag property from the event handler.

    void subItem_Click (object sender, EventArgs e)
     {
          ToolStripMenuItem toolstripItem = sender as ToolStripMenuItem;
    
          if (toolstripItem != null && toolstripItem.Tag != null)
          {
              yourObject.openconfig(toolstripItem.Tag.ToString))
          }
     }
    

    One more thing, you could use the Path class for file-path manipulations. There are bunch of methods to GetFileName, GetFileNameWithoutExtension etc..

    string filePath = "C:\diectory\name.txt";
    string fileNameWithoutExt = Path.GetFileNameWithoutExtension(filePath);