Мне было интересно, возможно ли с помощью TreeView в форме окна добавить или удалить уровень?Добавление или удаление уровня TreeNode
Например: мой TreeView, как это начать с:
ParentNode
| Child1
| Child2
, если пользователь нажимает на кнопку, чтобы добавить уровень в Child2 становится:
ParentNode
| Child1
| | Child1.1
Существует аа Node.Level
но использовать только для получения уровня и не устанавливать его.
EDIT:
Узлы создаются автоматически, уровень назначается в зависимости от стиля ячейки excel. Проблема в том, что созданный узел не находится в правильном месте, потому что файл excel выполнен неправильно. Так что я вижу 2 варианта уплотнительные решения этой проблемы:
1 пользователь модифицирует файл первенствовать непосредственно
2- создать Move Left
Move Right
кнопку на выбор узлов.
Я бы хотел предложить 2-ю возможность.
Вот код, который я использовал для создания узлов:
public static void AddNodes(Excel.Application app,
TreeView treeView)
{
Excel.Range selection = app.Selection;
ArrayList style = new ArrayList();
TreeNode parentNode = treeView.SelectedNode;
//Selected Node => Last used node
for (int i = 1; i <= selection.Rows.Count; i++)
{
TreeNode tn;
int fontSize = Convert.ToInt32(selection.Cells[i].Font.Size);
if (!style.Contains(fontSize))
{
style.Add(fontSize);
}
else if (style[style.Count - 1].Equals(fontSize))
{
try
{
treeView.SelectedNode = treeView.SelectedNode.Parent;
}
catch (Exception x)
{
ErrorBox(x);
}
}
else
{
int indexPreviousCellofSameColor = style.IndexOf(fontSize);
//Select TN parent
for (int j = 1; j <= (style.Count - indexPreviousCellofSameFont); j++)
{ treeView.SelectedNode = treeView.SelectedNode.Parent; }
style.RemoveRange(indexPreviousCellofSameFont + 1, style.Count - indexPreviousCellofSameFont - 1);
}
if (selection.Cells[i].Value2 == null)
{
//if empty cell, do something ... or nothing
treeView.SelectedNode = treeView.SelectedNode.LastNode;
}
else
{
//Add new TN to parent - TN object corresponds to excel cell
tn = new TreeNode()
{
Text = selection.Cells[i].Value2,
Tag = selection.Cells[i],
};
treeView.SelectedNode.Nodes.Add(tn);
tn.ToolTipText = tn.Level.ToString();
//selected TN => created TN
treeView.SelectedNode = tn;
}
}
}
Это полностью зависит от того, как вы добавили узлы, ничего другого. –
@HansPassant вы хотите, чтобы я добавил код, как я строю узлы? Честно говоря, я не вижу, как это может повлиять на перемещение узла влево или вправо. –
Я не получаю проблему. При добавлении узла в древовидное представление нужно ввести родительский узел в качестве параметра, который в вашем примере будет Child1. В чем проблема, с которой вы столкнулись? – GuidoG