Нужно поменять местами 2 соседних элемента (со всеми потомками) .
Алгоритм работы я понимаю: Берем первый элемент, записываем его во временную переменную, второй элемент записываем в первый, а во второй записываем то, что у нас в переменной лежит.
Проблема в том, что я не могу получить абсолютный индекс элемента. treeView1.SelectedNode.Level - возвращает "глубину" элемента, а мне нужен порядковый номер, чтобы знать куда писать.
TreeNode tmp = new TreeNode();
tmp = (TreeNode)treeView1.SelectedNode.Clone();
А дальше не знаю как и чего.
Если пытаться присвоить значение treeView1.SelectedNode - то это не то совсем, а К treeView1.SelectedNode.Nodes не присваивается.
Другие языки программирования и технологии
Поменять местами 2 Nod'a в TreeView C# (Visual Studio)
Вот текст кода для Делфи (скопировать выбраный нод с дочерними и вставить)
Я думаю поможет
<code>
var
SL : TStringList;
procedure TForm1.CutBtnClick(Sender: TObject);
var
i, j, StartLevel : integer;
TNSel : TTreeNode;
begin
TNSel := TreeView1.Selected;
if TNSel <> nil then begin
StartLevel := TNSel.Level;
i := TNSel.AbsoluteIndex;
j := i; // note for later deletion
if SL = nil then
SL := TStringList.Create
else
SL.Clear;
SL.AddObject(TNSel.Text, pointer(0));
inc(i);
with TreeView1 do begin
while Items.Level > StartLevel do begin
{stop before next sibling to top node\}
SL.AddObject(Items.Text, pointer(Items.Level - StartLevel));
inc(i);
end; {while Items.Level > StartLevel\}
Items[j].Delete;
end; {with TreeView1\}
end; {if TNSel <> nil\}
end;
procedure TForm1.PasteBtnClick(Sender: TObject);
var
i, Level : integer;
TNSel, TN : TTreeNode;
begin
with TreeView1 do begin
TNSel := Selected;
if TNSel <> nil then begin
TN := Items.Insert(TNSel, SL.Strings[0]);
Level := integer(SL.Objects[0]); // should be 0
for i := 1 to SL.Count - 1 do begin
if integer(SL.Objects) < Level then begin
{go up one level\}
TN := TN.Parent;
Level := integer(SL.Objects);
end; {if integer(SL.Objects) < Level\}
if Level = integer(SL.Objects) then
{same level\}
TN := Items.Add(TN, SL.Strings)
else begin
{go down one level\}
TN := Items.AddChild(TN, SL.Strings);
Level := integer(SL.Objects);
end; {if Level = integer(SL.Objects)\}
end; {for i := 1 to SL.Count - 1\}
end; {if TNSel <> nil\}
end; {with TreeView1\}
end;
</code>
Просто вместо выбранного нода ставишь свой
Я думаю поможет
<code>
var
SL : TStringList;
procedure TForm1.CutBtnClick(Sender: TObject);
var
i, j, StartLevel : integer;
TNSel : TTreeNode;
begin
TNSel := TreeView1.Selected;
if TNSel <> nil then begin
StartLevel := TNSel.Level;
i := TNSel.AbsoluteIndex;
j := i; // note for later deletion
if SL = nil then
SL := TStringList.Create
else
SL.Clear;
SL.AddObject(TNSel.Text, pointer(0));
inc(i);
with TreeView1 do begin
while Items.Level > StartLevel do begin
{stop before next sibling to top node\}
SL.AddObject(Items.Text, pointer(Items.Level - StartLevel));
inc(i);
end; {while Items.Level > StartLevel\}
Items[j].Delete;
end; {with TreeView1\}
end; {if TNSel <> nil\}
end;
procedure TForm1.PasteBtnClick(Sender: TObject);
var
i, Level : integer;
TNSel, TN : TTreeNode;
begin
with TreeView1 do begin
TNSel := Selected;
if TNSel <> nil then begin
TN := Items.Insert(TNSel, SL.Strings[0]);
Level := integer(SL.Objects[0]); // should be 0
for i := 1 to SL.Count - 1 do begin
if integer(SL.Objects) < Level then begin
{go up one level\}
TN := TN.Parent;
Level := integer(SL.Objects);
end; {if integer(SL.Objects) < Level\}
if Level = integer(SL.Objects) then
{same level\}
TN := Items.Add(TN, SL.Strings)
else begin
{go down one level\}
TN := Items.AddChild(TN, SL.Strings);
Level := integer(SL.Objects);
end; {if Level = integer(SL.Objects)\}
end; {for i := 1 to SL.Count - 1\}
end; {if TNSel <> nil\}
end; {with TreeView1\}
end;
</code>
Просто вместо выбранного нода ставишь свой
Коля Глазунов
i := TNSel.AbsoluteIndex; - вот именно это мне и нужно, но ничего подобного найти не могу. В Делфи я бы и сам сделал.
Похожие вопросы
- C++ Visual Studio 2010 Express
- Как написать Базу данных На C++ Visual Studio 2010
- Visual Studio C++, ошибка : "не удается найти указанный файл"
- Здравствуйте товарищи программисты хотел спросить. VIsual studio 2022 или Visual Studio Code
- Visual studio c++ помогите пожалуста!!!
- Visual Studio 2010 C++: Как создать оконное приложение?
- Подскажите с чего начать изучение Visual Studio ???(ещё вопросы в метках...)
- Зачем нужен Visual Studio Code?
- Какая разница между Microsoft Visual Studio 2010 и Microsoft Visual C++?
- как в Microsoft Visual Studio 2010 в C# в системе счисления, перевести в десятеричную? Как дополнить код? Помогите плиз