Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t设置TreeView.SelectedNode属性_C#_Winforms_Treeview - Fatal编程技术网

C# Can';t设置TreeView.SelectedNode属性

C# Can';t设置TreeView.SelectedNode属性,c#,winforms,treeview,C#,Winforms,Treeview,我正在尝试在清理和重新填充我的树视图后设置所选节点。以下是我尝试的代码: private TreeNode selectednode; private void ElementTextChanged(object sender, EventArgs e)//saves changes to the XElements displayed in the textboxes { BusinessLayer.ElementName = (sender as TextBox).Tag.ToStr

我正在尝试在清理和重新填充我的树视图后设置所选节点。以下是我尝试的代码:

private TreeNode selectednode;
private void ElementTextChanged(object sender, EventArgs e)//saves changes to the XElements displayed in the textboxes
{
    BusinessLayer.ElementName = (sender as TextBox).Tag.ToString();
    string Type = (sender as TextBox).Name;
    string Value = (sender as TextBox).Text;

    if (TView_.SelectedNode!=null)
    {
       selectednode = TView_.SelectedNode; 
    }
    string NodePath = TView_.SelectedNode.FullPath.Replace("\\", "/");

    Telementchange.Stop();
    Telementchange.Interval = 2000;
    Telementchange.Tick += (object _sender, EventArgs _e) => {
        if (Type=="Value")
        {
            BusinessLayer.ChangeElementValue(NodePath,Value);//nembiztos hogy így kéne ezt meghívni
        }
        else
        {

            BusinessLayer.ChangeElementName(NodePath, Value);
            BusinessLayer.ElementName = Value;
        }            
        FillTree(BusinessLayer.Doc);
        TView_.SelectedNode = selectednode; //nemműködikezaszar!!!!!
        TView_.Select();
        Telementchange.Stop(); 
    };
    Telementchange.Start();   
}
在我设置了
TView\uz.SelectedNode
属性之后的某个季节,该属性为空。
谢谢你的帮助

看看你展示的代码,你似乎做到了这一点:

  • 将当前选定的
    节点
    存储在变量中
  • 清洁并重新加注
    TreeView
  • 选择存储的
    节点
这肯定会失败,因为在填充之后,存储的
节点
不再是
树视图
节点集合的一部分,除非您在填充例程中再次添加它

我认为你不会那样做


如果要重新选择某个节点,则需要在新的节点集合中标识该节点。如果
文本
足够好,请执行递归的
树状视图
搜索,如中L.B的答案中的搜索(虽然不是可接受的答案!)

我无法通过设置SelectedNode属性来解决问题,因此我做了一个变通方法

 private void RefreshTreeView()
        {

            FillTree(BusinessLayer.Doc);
            TView_.SelectedNode = _selectednode;
            ExpandToPath(TView_.TopNode, _selectedPath);                    
        }

        void ExpandToPath(TreeNode relativeRoot, string path)
        {
            char delimiter = '\\';
            List<string> elements = path.Split(delimiter).ToList();
            elements.RemoveAt(0);
            relativeRoot.Expand();
            if (elements.Count == 0)
            {
                TView_.SelectedNode = relativeRoot;
                return;
            }
            foreach (TreeNode node in relativeRoot.Nodes)
            {
                if (node.Text == elements[0])
                {
                    ExpandToPath(node, string.Join(delimiter.ToString(),elements));
                }
            }
        }
private void refreshttreeview()
{
FillTree(BusinessLayer.Doc);
TView\uU.SelectedNode=\u SelectedNode;
ExpandToPath(TView\u.TopNode,\u selectedPath);
}
void ExpandToPath(TreeNode relativeRoot,字符串路径)
{
字符分隔符=“\\”;
List elements=path.Split(分隔符).ToList();
元素。移除(0);
relativeRoot.Expand();
如果(elements.Count==0)
{
TView_uu.SelectedNode=relativeRoot;
返回;
}
foreach(relativeRoot.Nodes中的TreeNode节点)
{
if(node.Text==元素[0])
{
ExpandToPath(node,string.Join(delimiter.ToString(),elements));
}
}
}

为什么确定存在选定的节点?是的,但由于某些原因,在调试器中查看时句柄和完整路径属性引发了异常。是的,但我必须进行变通。(很抱歉没有写下解决方案,但我有点忘了我在这里问过。)