2008-10-22 8 views
9

Mam listę ciągów, które są odnawiane co 5 sekund. Chcę utworzyć menu kontekstowe i dynamicznie ustawiać jego elementy za pomocą tej listy. Problem polega na tym, że nie mam nawet pojęcia, jak to zrobić i zarządzam działaniem Click dla każdego wygenerowanego produktu (który powinien używać tej samej metody z innym parametrem DoSomething ("item_name")).Dynamicznie dodawaj elementy do menu kontekstowego i zestawu Kliknij akcję

Jak powinienem to zrobić?

Dzięki za poświęcony czas. Pozdrawiamy.

Odpowiedz

19

Tak, można usunąć elementy z menu kontekstowego z:

myContextMenuStrip.Items.Clear(); 

Można dodać element pod numerem:

myContextMenuStrip.Items.Add(myString); 

Menu kontekstowe zawiera zdarzenie ItemClicked. Twój menedżer może wyglądać tak:

private void myContextMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e) 
{ 
    DoSomething(e.ClickedItem.Text); 
} 

Wydaje się działać dobrze dla mnie. Daj mi znać, jeśli źle zrozumiałem twoje pytanie.

+0

Dzięki! Właśnie tego szukałem –

+0

Cóż, to dodaje ciąg ... Jak można by dodać element MenuItem? To znacznie ułatwiłoby obsługę zdarzeń –

1

Inną alternatywą użyciu ToolStripMenuItem obiektu:

//////////// Create a new "ToolStripMenuItem" object: 
ToolStripMenuItem newMenuItem= new ToolStripMenuItem(); 

//////////// Set a name, for identification purposes: 
newMenuItem.Name = "nameOfMenuItem"; 

//////////// Sets the text that will appear in the new context menu option: 
newMenuItem.Text = "This is another option!"; 

//////////// Add this new item to your context menu: 
myContextMenuStrip.Items.Add(newMenuItem); 


Wewnątrz przypadku ItemClicked twoich myContextMenuStrip, można sprawdzić, która opcja została wybrana (na podstawie właściwości name elementu menu)

private void myContextMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e) 
{ 
    ToolStripItem item = e.ClickedItem; 

    //////////// This will show "nameOfMenuItem": 
    MessageBox.Show(item.Name, "And the clicked option is..."); 
}