Winforms 向树节点添加或删除标高
我想知道在windows窗体中使用TreeView是否可以添加或删除级别 例如: 我的树视图是这样开始的:Winforms 向树节点添加或删除标高,winforms,treeview,treenode,Winforms,Treeview,Treenode,我想知道在windows窗体中使用TreeView是否可以添加或删除级别 例如: 我的树视图是这样开始的: ParentNode | Child1 | Child2 如果用户单击按钮向Child2添加一个级别,则该级别将变为: ParentNode | Child1 | | Child1.1 有一个节点.Level函数,但仅用于获取级别,而不用于设置级别 编辑: 节点是自动生成的,级别是根据excel单元格的样式指定的。问题是,创建的节
ParentNode
| Child1
| Child2
如果用户单击按钮向Child2添加一个级别,则该级别将变为:
ParentNode
| Child1
| | Child1.1
有一个节点.Level
函数,但仅用于获取级别,而不用于设置级别
编辑:节点是自动生成的,级别是根据excel单元格的样式指定的。问题是,创建的节点可能不在正确的位置,因为excel文件制作得不好。因此,我看到了两种解决此问题的方法: 1-用户直接修改excel文件
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;
}
}
}
publicstaticvoidaddnodes(Excel.Application应用程序、,
树视图(树视图)
{
Excel.Range selection=应用程序选择;
ArrayList style=新的ArrayList();
TreeNode parentNode=treeView.SelectedNode;
//所选节点=>上次使用的节点
对于(inti=1;i,我必须完全改变我的答案,以适应改变后的问题。
这似乎完成了我测试中的工作。它将所选节点移动到一个新的级别,位于其正上方的级别之下。
它需要更多的检查,以确保您的节点不会移动到遗忘
private void button1_Click(object sender, EventArgs e)
{
TreeNode selected = treeViewFilter.SelectedNode;
TreeNode parent = selected.Parent;
// find the node just above the selected node
TreeNode prior = parent.Nodes[selected.Index - 1];
if (parent != prior)
{
treeViewFilter.Nodes.Remove(selected);
prior.Nodes.Add(selected);
}
}
这完全取决于你是如何添加节点的,没有别的。@HansPassant你想让我添加如何构建节点的代码吗?老实说,我看不出这会如何影响向左或向右移动节点。我不明白这个问题。在树视图中添加节点时,必须输入父节点作为参数,在你的示例中,这将是Child1那么您遇到的问题是什么?@GuidoG请参见编辑。我提供了一些上下文和构建节点的方式,更准确地说是我试图实现的原因this@ElliottAddi看到我的更新答案了吗?我会修改一下,这样我也可以移到左边。非常感谢你的时间!