Выпадающие элементы в ToolstripmenuItem и проверка, проверены ли их элементы - PullRequest
0 голосов
/ 28 ноября 2008

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

Весь мой запас может отображаться в виде таблицы данных.

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

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

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

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

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 всегда содержит ноль.

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

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

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;
        }
    }
}

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

Ответы [ 3 ]

0 голосов
/ 28 ноября 2008

Вы можете использовать свойство IndexOfKey, чтобы найти ToolStripMenuItem обратно. Это требует установки свойства Name при добавлении их:

ToolStripMenuItem it = (ToolStripMenuItem)item.DropDownItems.Add(element);
it.Name = element;
// etc..
0 голосов
/ 18 декабря 2014

Когда вы заполнили свой 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
0 голосов
/ 28 ноября 2008

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

filterMenu.DropDownItems [s [0]].

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...