2016-07-16 2 views
0

У меня есть пункт меню, который содержит 5 подпунктов, каждый из которых содержит 4 подпозиции, каждый из которых будет принимать одну новую форму. Если бы я хотел был бы кодировать это с новой формой для каждого вещь, которая возьмет меня 4 * 5 = 20 форм !!!!Оптимизация кода элементов меню

Есть ли какой-либо возможный способ, когда я могу узнать позицию выбранного подпункта? и после этого я могу сделать только один вид, что делает все

enter image description here

+0

Да. Поместите все элементы в форму, а затем используйте свойство Visible = false (или true) для элементов управления. – jdweng

+0

, который просто спрячет элемент, я хочу получить индекс выбранного элемента или что-то в этом роде, чтобы я мог обрабатывать все варианты в одной форме на основе выбранного элемента индекса –

ответ

0

Если вы хотите, чтобы получить позиции пункта меню от обработчика, вы можете продолжать работать до каждого владелец пункта и найти это место, пока у вас есть полный список должностей:

// Get a reference to the current item as a tool strip menu item 
ToolStripMenuItem self = (ToolStripMenuItem)sender; 

// Build a list of positions 
List<int> position = new List<int>(); 
ToolStripMenuItem cur = self; 
// Keep looping until we don't find a parent 
while (cur != null) 
{ 
    if (cur.OwnerItem is ToolStripMenuItem) 
    { 
     // The owner is a menu item, add it's position to our list 
     ToolStripMenuItem parent = ((ToolStripMenuItem)cur.OwnerItem); 
     position.Insert(0, parent.DropDownItems.IndexOf(cur)); 
     // And now work on the owner 
     cur = parent; 
    } 
    else 
    { 
     // The owner isn't a menu item, so break out of our loop 
     cur = null; 
    } 
} 

// And as a demo, just show the positions: 
MessageBox.Show("You clicked on item at " + 
    string.Join(",", position.Select(x => x.ToString()).ToArray())); 
Смежные вопросы