Как программно добавить вещи в меню? - PullRequest
8 голосов
/ 22 октября 2009

Я хочу добавить в меню все, что написано в текстовом поле. В файле> Недавние поиски, что у меня есть.

Как я могу сделать это программно? И можно ли динамически назначать обработчик событий, чтобы при нажатии пользователем элемента X в этой подпапке текст копировался НАЗАД в текстовое поле?

РЕДАКТИРОВАТЬ: Как программно вызвать в папку Busquedas Recientes (на рис.)

alt text

Ответы [ 2 ]

10 голосов
/ 22 октября 2009

Вы можете сделать это, воспользовавшись параметром object sender в обработчике событий. Большая часть этого не в моей голове, так что я только догадываюсь , что она скомпилируется, но она должна помочь вам начать.

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);
}
5 голосов
/ 22 октября 2009

Это довольно просто. Вы можете сделать следующее:

ToolStripMenuItem menuItem

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

Впоследствии, если событие Click не работает (у меня возникла проблема, когда он не определил правильный пункт меню), вы можете добавить событие «DropDownItemClicked» в menuItem. и чтобы получить текст элемента, который вы щелкнули, вы делаете:

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

Надеюсь, это поможет.

Да, и не забудьте также удалить Событие. Я забыл сделать это со всеми динамическими меню, которые я создал, и каким-то образом в итоге съел половину моей памяти. : D

...