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