Chociaż wydaje mi się, że pisanie tego kodu jest stratą czasu, biorąc pod uwagę brak odpowiedzi na uwagi OP, to przynajmniej mogę pokazać, jak można poprawić przykład kodu Le-Savarda, tak aby wielość kliknięć wybór w menu kontekstowym w górę lub w dół ... zakładając, że menu kontekstowe nie jest automatycznie zamykane za każdym razem, a użytkownik jest zmuszony do wielokrotnego wybierania tego samego węzła ... zrobi to, co należy, z wybranym przez siebie węzłem , a nie tworzyć un-ma skutki uboczne:
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;
}
}
}
}
oczywiście tę poprawkę, jednak nie odnosi się do faktu, że w przykładowym kodzie, że wiele węzłów korzeni nie można przenieść (ponieważ są one „parentless): to easiliy naprawialny.
Nie odnosi się również do bardziej interesującego przypadku, w którym przejście do najwyższego węzła podrzędnego oznacza dokonanie interpretacji miejsca, w którym powinien znajdować się "promowany" kod podrzędny: dokładnie taki sam "wybór strategiczny" ma miejsce w przypadku "przesunięcia w dół" "ostatni węzeł podrzędny węzła nadrzędnego, a zatem wymagane jest podjęcie decyzji, gdzie powinien się udać. W kodzie Dynami Le-Savarda: te przypadki są po prostu ignorowane.
jednak to konstrukcja wyboru ograniczyć węzeł podrzędny z tylko przemieszczane w ich węzły zbiór węzłów macierzystych: wyboru projektu, który może być w pełni nadaje się do jednego rozwiązania.
Podobnie, jest to wybór projekt zmusić użytkownika, aby wybrać węzeł i kontekst kliknij, aby uzyskać menu kontekstowe, które umożliwia wybór przesuwa się w górę lub w dół za każdym razem chcą, aby przenieść go : to nie jest wybór projektu, który bym zrobił: używałbym tu przeciągania i upuszczania lub przycisków, które umożliwiają powtarzalne szybkie przenoszenie dowolnego wybranego węzła w dowolnym miejscu drzewa.
Tak przy okazji, lubię używać rozszerzeń Dynami Le-Savard.
Czy możesz wyjaśnić, WinForms i WebForms :) –
Cholera, zapomniałem przepraszam - WinForms – Kai
trochę więcej szczegółów proszę: używasz standardowego WinForm TreeView? Czy rozważyłeś przeciąganie i upuszczanie, aby to zrobić? : wiele przykładów tego, jak to zrobić w MSDN, CodeProject itp.Rozważmy przypadek: masz węzeł "1a", który ma węzły potomne: jest to pierwszy węzeł podrzędny węzła "1": wybierasz, za pośrednictwem menu kontekstowego (?), Aby przesunąć węzeł "1a" o jeden: co powinno się stać : nic ? węzeł "1a" powinien stać się "rodzeństwem" węzła "1"? Jeśli węzeł "1a" staje się "rodzeństwem" węzła "1": czy powinien być umieszczony nad lub pod węzłem "1" w TreeView? – BillW