Хотел бы знать, являюсь ли я ошибкой или я столкнулся с ошибкой.
У меня есть сетка с родителями и детьми. Я сделал кнопки для перемещения узлов сверху вниз и обратно. Это работает, но первый выбранный узел остается выбранным. Узел, который необходимо переместить, можно перемещать по желанию. Почему первый выбранный узел все еще отображается?
private void IDC_ARROW_UP_Click(object sender, System.EventArgs e)
{
foreach (Infragistics.Win.UltraWinTree.UltraTreeNode Node in this.uTreeMenue.SelectedNodes)
{
Node.Reposition(Node, Infragistics.Win.UltraWinTree.NodePosition.Previous);
Node.Selected = true;
}
}
Выбранный узел показан ниже:





Попробуйте код ниже:
private void IDC_ARROW_UP_Click(object sender, System.EventArgs e)
{
var selected = uTreeMenue.SelectedNodes;
selected.SortByPosition();
var cnt = selected.Count;
if (cnt > 0 && selected[0].PrevVisibleNode is UltraTreeNode node)
{
node.Reposition(selected[cnt - 1], Infragistics.Win.UltraWinTree.NodePosition.Next);
}
}
Логика, реализованная в приведенном выше коде, очень проста. Вместо того, чтобы перемещать все выбранные узлы (например, Canada…France на картинке ниже) вверх, первый узел, расположенный перед всеми выбранными элементами, перемещается после всех выбранных элементов вниз:
Таким образом, после перемещения узла, предшествующего всем выбранным элементам, вниз (в тестовом примере это элемент Brazil) элемент управления UltraTree будет выглядеть следующим образом:
Чтобы правильно определить пределы выбранных элементов, их следует отсортировать с помощью метода SortByPosition(), который сортирует коллекцию SelectedNodes таким образом, чтобы элементы отображались в том же порядке, что и в дереве.
@craverealize: Добро пожаловать! Я добавил больше описания в свой ответ, чтобы было понятно, как это работает.
Большое спасибо, дорогой незнакомец. Это сработало чудесно, я не знаю почему, но это сработало.