2008-11-28 2 views
0

Я строю небольшую Winform, в которой я могу просматривать виды пищи на моей кухне.Выпадающие элементы на ToolstripmenuItem и посмотреть, проверены ли их предметы

Весь наш фонд может быть отображен на рисунке datagrid.

Теперь у меня есть filtermenu, который содержит раскрывающийся список элементов, которые можно проверить и снять.

На основании того, какие элементы в этом списке отмечены, дисплей в представлении datagridview изменяется. Отображаются только выбранные элементы.

По крайней мере, так я и хочу. Меню в настоящее время состоит из 5 пунктов: мясо, рыба, фрукты, овощи и прочее.

Я использую абстрактный класс. Продовольствие и все другие классы производятся от него. В конце концов я сделать строковое представление каждого куска пищи, которая выглядит немного как этот

FoodType * FoodName * AmountInStock * ...

Так звезда * как разделитель.

Тогда я это

foreach(Food f in this.kitchen.FoodList) 
{ 
    string[] s = f.ToString().Split('*'); 
    Object o = filterMenu.DropDownItems[s[0]]; 
} 

С FoodList будучи ArrayList. Затем я отлаживаю это с помощью VisualStudio 2008

Объект o всегда содержит null.

Тем не менее s [0] всегда содержит название пищевого продукта. То, что я хочу, это узнать, как выбрать предмет, на который проверен менулист. Если флажок установлен, datagridview должен отобразить его. Если нет, не показывайте его.

Я заполнить его в конструкторе с этим:

public static void Fill(ToolStripMenuItem item, Type food) 
{ 
    foreach (string element in Enum.GetNames(food)) 
    { 
     if (element != "nothing") 
     { 
      ToolStripMenuItem it = (ToolStripMenuItem)item.DropDownItems.Add(element); 
      it.Checked = true; 
      it.CheckOnClick = true; 
     } 
    } 
} 

Я попытался объект браузера, но я не могу найти ничего, что помогает, поэтому я перехожу здесь.

ответ

0

Свойство IndexOfKey можно использовать для поиска ToolStripMenuItem. Это требует установки свойства Имени при добавлении их:

ToolStripMenuItem it = (ToolStripMenuItem)item.DropDownItems.Add(element); 
it.Name = element; 
// etc.. 
0

Вы ссылка проверки, когда вы делаете

filterMenu.DropDownItems [s [0]].

Вы не сопоставляете значение s [0] с элементами в DropDownItems, но вы соответствуете их ссылкам, и они не совпадают.

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

+0

Хм. Я не могу проверить это из-за того, что у меня нет Dropdowncontrol в VS2008. – Tigraine 2008-11-28 10:10:13

0

Когда вы заполнили свой MenuStrip от конструктора вы добавили элементы, не давая им название.Затем вы пытались получить доступ к элементу по имени:

Object o = filterMenu.DropDownItems[s[0]]; //null Name?? 

Если добавить элемент и присвоить ему имя, которое вы можете получить доступ к детали:

ToolStripMenuItem it = (ToolStripMenuItem)item.DropDownItems.Add(element); 
it.Name = element; // This was missing 

Основываясь на О.П. вопрос Что я хочу заключается в том, чтобы узнать, проверен ли элемент этого менулиста. Этот код будет показано, как найти элемент меню, проверяется:

filterMenu.DropDownItems.Cast<ToolStripMenuItem>().Where(tsi=>tsi.Checked).First().Text 
+2

Позаботьтесь подробнее о том, почему это должен быть путь? – Werner 2014-12-17 23:03:16

Смежные вопросы