2016-02-16 3 views
0

Я пытаюсь установить выбранный узел после очистки и пополнения моего дерева. Вот код, который я попробовал:Не удается установить свойство TreeView.SelectedNode

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_.SelectedNode свойство это нуль. Спасибо за помощь!

+0

Почему вы уверены, что есть выбранный узел? – TaW

+0

Да, но по какой-то причине свойство Handle и FullPath выбрасывало исключение во время просмотра в отладчике. –

+0

Да, но мне пришлось сделать обходной путь. (Извините за то, что вы не писали о решении, но я вроде забыл о том, что я спросил его здесь.) –

ответ

0

я не мог решить мою проблему, установив свойство 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)); 
       } 
      } 
     } 
0

Глядя на код, который вы показать вам, кажется, делают это:

  • магазин в данный момент выбран Node в переменной
  • чистой и пополнить TreeView
  • выберите сохраненное Node

Это связано с сбоем, поскольку на момент после наполнения сохраненный Node больше не является частью TreeView, если вы не добавили его снова в процедуру заполнения.

Я не думаю, что вы это делаете.

Если вы хотите переустановить какой-либо узел, вам нужно будет идентифицировать его в новой коллекции узлов. Если Text достаточно для этого сделать рекурсивный TreeView поиска, как тот, в ответ LB здесь в this post (не принят ответ, хотя!) Хорошо