Come aggiungere cose a una menustrip a livello di codice?
Domanda
Voglio aggiungere tutto ciò che è scritto in una casella di testo a un menustrip. Nel File > Ricerche recenti che ho.
Come posso fare programmaticamente? E posso assegnare un gestore di eventi in modo dinamico in modo tale che quando un utente fa clic sull'elemento X in quella sottocartella, il testo viene copiato INDIETRO nella casella di testo?
MODIFICA: Come posso chiamare programmaticamente la cartella Busquedas Recientes (nella foto)
Soluzione
Puoi farlo sfruttando il parametro mittente oggetto
nel gestore eventi. Gran parte di questo è fuori dalla mia testa, quindi sto solo indovinando che verrà compilato ma dovrebbe iniziare.
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);
}
Altri suggerimenti
È piuttosto semplice. Puoi fare quanto segue:
ToolStripMenuItem menuItem
foreach (string text in collectionOfText)
{
ToolStripMenuItem foo = new ToolStripMenuItem(text);
foo.Click += new EventHandler(ClickEvent);
menuItem.DropDownItems.Add(foo);
}
Successivamente, se l'evento Click non funziona (ho avuto problemi a non rilevare la voce di menu corretta), puoi aggiungere un " DropDownItemClicked " evento al menuItem. e per ottenere il testo dell'elemento su cui hai fatto clic, esegui:
private void DropedDownItemClickedEvent(object sender, ToolStripItemClickedEventArgs e)
{
string text = e.ClickedItem.Text;
}
Spero che sia d'aiuto.
Oh, e non dimenticare di rimuovere anche l'Evento. Ho dimenticato di farlo con tutti i menu dinamici che avevo creato e in qualche modo ho finito per mangiare metà della mia memoria. : D