Si bien creo que escribir este código es una pérdida de tiempo, dada la falta de respuesta a los comentarios del OP, lo menos que puedo hacer es mostrar cómo el código del ejemplo de Le-Savard se puede reparar para que varios clics de la opción hacia arriba o hacia abajo en el menú contextual ... suponiendo que el menú contextual no se cierra automáticamente cada vez y el usuario se ve obligado a seleccionar el mismo nodo una y otra vez ... hará lo correcto con el nodo seleccionado de manera correcta , y no crear efectos secundarios de la ONU-previsto:
public static class Extensions
{
public static void MoveUp(this TreeNode node)
{
TreeNode parent = node.Parent;
if (parent != null)
{
int index = parent.Nodes.IndexOf(node);
if (index > 0)
{
parent.Nodes.RemoveAt(index);
parent.Nodes.Insert(index - 1, node);
// bw : add this line to restore the originally selected node as selected
node.TreeView.SelectedNode = node;
}
}
}
public static void MoveDown(this TreeNode node)
{
TreeNode parent = node.Parent;
if (parent != null)
{
int index = parent.Nodes.IndexOf(node);
if (index < parent.Nodes.Count - 1)
{
parent.Nodes.RemoveAt(index);
parent.Nodes.Insert(index + 1, node);
// bw : add this line to restore the originally selected node as selected
node.TreeView.SelectedNode = node;
}
}
}
}
por supuesto esta revisión, aún no aborda el hecho de que en el código de ejemplo que múltiples nodos raíz no se pueden mover (ya que son 'sin padres): eso es easiliy fijable.
Tampoco aborda el caso más interesante en el que mover un nodo secundario superior significa hacer una interpretación de dónde debería ir ese código secundario "promocionado": exactamente la misma "elección estratégica" involucra "mover hacia abajo" "el último nodo hijo de un nodo padre y, por lo tanto, se requiere que decida dónde debe ir. En el código de Dynami Le-Savard: estos casos simplemente se ignoran.
Sin embargo, es un diseño-elección para restringir nodo hijo de solamente ser movido dentro de sus nodos padre Nodos colección: una opción de diseño que puede ser perfectamente adecuado para una solución.
Del mismo modo, se trata de una elección diseño puede obligar al usuario a seleccionar un nodo y hacer un clic contextual para obtener un menú contextual que permite una elección de moverse hacia arriba o hacia abajo cada vez que quieren moverlo : esa no es una opción de diseño que yo haría: usaría arrastrar y soltar aquí o botones que permitan la reubicación rápida repetida de cualquier nodo seleccionado en cualquier parte del árbol.
Por cierto, me gusta el uso de extensiones de Dynami Le-Savard aquí.
Puede aclarar, Windows Forms o Web Forms :) –
maldición, lo siento olvidó - WinForms – Kai
Un poco más de detalle, por favor: ¿Está utilizando el Windows Forms TreeView estándar? ¿Has considerado arrastrar y soltar para hacer esto? : muchos ejemplos de cómo hacer esto en MSDN, CodeProject, etc.Considere el caso: tiene un nodo "1a" que tiene nodos secundarios: es el primer nodo hijo del nodo "1": selecciona, a través de su menú contextual (?), Para mover el nodo "1a" uno arriba: lo que debería suceder : nada ? el nodo "1a" debería convertirse en un "hermano" del nodo "1"? Si el nodo "1a" se convierte en un "hermano" del nodo "1": ¿debería colocarse encima o debajo del nodo "1" en el TreeView? – BillW