У меня есть большой список объектов, из которых пользователь должен иметь возможность выбирать.У меня есть ContextMenuStrip в моем окне, и у меня есть несколько MenuItems для каждой категории сущностей.
В примере с библиотекой, подумайте "Staff", "Borrowables", "Patrons" и т. Д. *
«Штат» может содержать «По типу занятости» -> {«Полная занятость», «Неполный рабочий день»} или «По полу» -> {«Мужской», «Женский»} и т. Д.
«Заимствованные» могут содержать «По типу» -> {«Книги», «Журналы», «DVD»} или «По жанру» -> {«Художественная литература» -> {«Научно-фантастический», «Романтика», «Преступление»"}," Non-Fiction "{" Наука "," Музыка "," История "}} и т. Д.
По сути, одна сущность может находиться в нескольких местах одновременно.Сотрудник может быть как штатным, так и женским.Заемщиком может быть книга и роман.и т.д.
Я программно создал List<ToolStripMenuItem>
вместе с обработчиками событий, тегами и всем остальным.Затем я программно просмотрел каждое из них и добавил их в различные меню и подменю, чтобы к ним можно было получить доступ из разных мест.Идея состоит в том, что мне нужно только 1 объект в памяти на ToolStripMenuItem, и если он отмечен / не отмечен, то должно отражаться на всех из них.
Это может показаться элегантным решением, и я действительно с нетерпением ждал, чтобы это сработало, но, очевидно, когда я добавляю ToolStripMenuItem в один ToolStripMenuItemDropDownItems, он удаляется из того места, где он был добавлен.
Это огорчает меня.Если бы все они были одним и тем же объектом, мне не пришлось бы писать много кода, чтобы пройти и проверять все соответствующие элементы, когда один отмечен, потому что проверка одного проверяет их все, а отмена одного снимает их все.
Есть ли другой способ сделать это с минимальным кодом?
Это небольшой пример того, что у меня есть:
foreach (ToolStripMenuItem item in staffItems)
{
Staff s = (Staff)item.Tag;
foreach (ToolStripMenuItem tsmi in byStaffLocationToolStripMenuItem.DropDownItems)
if ((Location)tsmi.Tag == s.Location)
tsmi.DropDownItems.Add(item); // [1] Item added here
foreach (ToolStripMenuItem tsmi in byStaffTypeToolStripMenuItem.DropDownItems)
if ((StaffType)tsmi.Tag == s.StaffType)
tsmi.DropDownItems.Add(item); // removed from [1] and added here instead :(
}