2009-10-22 30 views
7

Je veux ajouter tout ce qui est écrit dans une zone de texte à un menustrip. Dans la chose Fichier> Recherches récentes que j'ai.Comment ajouter des éléments à un menu par programme?

Comment puis-je faire de la programmation? Et puis-je assigner dynamiquement un gestionnaire d'événements de sorte que lorsqu'un utilisateur clique sur l'élément X dans ce sous-dossier, le texte est copié dans la zone de texte?

EDIT: Comment puis-je appeler programatically sur le dossier Búsquedas Recientes (en pic)

alt text

+0

Quel IDE ou plate-forme/langue utilisez-vous? (par exemple, C avec API Win32, C# sur .NET Framework, ou etc.) – Achimnol

Répondre

8

Vous pouvez le faire en tirant parti du paramètre object sender dans le gestionnaire d'événements. La plupart de ceci est au-dessus de ma tête donc je suis seulement devinant qu'il compilera mais il devrait vous aider à commencer.

void AddMenuItem(string text, string action) 
{ 
    ToolStripMenuItem item = new ToolStripMenuItem(); 
    item.Text = text; 
    item.Click += new EventHandler(item_Click); 
    item.Tag = action; 

    //first option, inserts at the top 
    //historyMenu.Items.Add(item); 

    //second option, should insert at the end 
    historyMenuItem.DropDownItems.Insert(historyMenuItem.DropDownItems.Count, item); 
} 

private void someHistoryMenuItem_Click(object sender, EventArgs e) 
{ 
    ToolStripMenuItem menuItem = sender as ToolStripMenuItem; 

    string args = menuItem.Tag.ToString(); 

    YourSpecialAction(args); 
} 
+0

La première méthode fonctionne un peu. La recherche est en cours d'ajout mais au plus haut niveau. J'en ai besoin pour être ajouté dans cette hiérarchie: Fichier> RecentSearches> THINGS GO HERE. De l'aide? –

+0

Voir mes modifications pour un emplacement spécifique. –

4

C'est plutôt simple. Vous pouvez effectuer les opérations suivantes:

ToolStripMenuItem menuItem 

foreach (string text in collectionOfText) 
{ 
    ToolStripMenuItem foo = new ToolStripMenuItem(text); 
    foo.Click += new EventHandler(ClickEvent); 
    menuItem.DropDownItems.Add(foo); 
} 

Par la suite, si l'événement Click ne fonctionne pas (j'ai eu du mal où il ne détecte pas l'élément de menu correct), vous pouvez ajouter un événement « DropDownItemClicked » au ligneMenu . et pour obtenir le texte de l'article que vous avez cliqué, vous faites:

private void DropedDownItemClickedEvent(object sender, ToolStripItemClickedEventArgs e) 
{ 
    string text = e.ClickedItem.Text; 
} 

J'espère que cela aide.

Oh et n'oubliez pas de supprimer l'événement aussi bien. J'ai oublié de le faire avec tous les menus dynamiques que j'avais créés et j'ai fini par manger la moitié de ma mémoire. : D

+0

Lol. : P +1 pour le dernier commentaire. M'a sauvé une autre question xD –

Questions connexes