Пожалуйста, попробуйте этот CSS:
@media (max-width: 768px){
#main-nav ul{
flex-direction: column;
}
.submenu{
position: relative;
}
}
Это удалит узлы после их перечисления и может быть использовано рекурсивно для n-ярусов узлов.
void RemoveCheckedNodes(TreeNodeCollection nodes)
{
List<TreeNode> checkedNodes = new List<TreeNode>();
foreach (TreeNode node in nodes)
{
if (node.Checked)
{
checkedNodes.Add(node);
}
else
{
RemoveCheckedNodes(nodes.ChildNodes);
}
}
foreach (TreeNode checkedNode in checkedNodes)
{
nodes.Remove(checkedNode);
}
}
Если вы хотите сделать это эффективно, вам нужно отслеживать проверенные узлы, поскольку они проверены. Сохраните отмеченные узлы дерева в списке (и удалите их, поскольку они не проверены).
Если у вас есть уникальный ключ и множество узлов для отслеживания, вы можете рассмотреть и словарь. Но если вы имеете дело только с 10-50, это, вероятно, не будет иметь большого значения.
Тогда, вместо того, чтобы зацикливаться по всему дереву, вы просто зацикливаетесь на своем (меньшем) списке узлов.
Во время итерации вы могли бы создать новый список непроверенных элементов, а затем повторно привязать свое древовидное представление к этому новому списку (отбрасывая старый).
Попробуйте пройти через узлы назад. Таким образом, ваш индекс не будет превышать размер вашего узла:
for( int ndx = nodes.Count; ndx > 0; ndx--) { TreeNode node = nodes[ndx-1]; if (node.Checked) { nodes.Remove(node); } // Recurse through the child nodes... }