我有一个有两种表格的应用程序。第一个表单用于以编程方式创建TreeView
个节点,第二个表单具有实际的TreeView
。当应用程序加载时,我在TreeView
中创建了两个根节点。
我的问题是当我为任一个根节点创建我的第一个子节点时,它没有突出显示。我提供了表单和TreeView
焦点,并且还禁用了HideSelection
的{{1}}属性。
一旦我将另一个子节点添加到任一根节点,就会在插入的节点突出显示时。我希望每个插入的节点在插入后都会突出显示,但只有在插入第一个节点后才能生效。
示例代码:
TreeView
我使用“KEY”对象的ID和节点的字符串创建一个新的树节点,然后该函数返回新创建的树节点,使其成为树中的选定节点。
在那段代码之后我打电话给:
m_ObjectAnimationForm.tr_vw_ANIMATION_OBJECT_LIST.SelectedNode = m_ObjectAnimationForm.tr_vw_ANIMATION_OBJECT_LIST.Nodes["OBJECTS_ROOT"].Nodes.Add(NewObject.ID, NewObject.ID);
答案 0 :(得分:0)
尝试使用Node.Select(),它将选择节点并突出显示它。
焦点在这里不起作用。
答案 1 :(得分:0)
我有一个稍微不同的设置,我通过选择datagridview中的项目来控制TreeView中突出显示的项目。它不是最优雅的方法,但它有效。
摘要:
1。)从Source TreeView,Other Control或其他地方获取索引 2.)展开Target TreeView中的所有节点 3.)迭代目标中的树节点,直到达到索引 4.)设置TreeView.SelectedNode =“找到的节点” 5.)将焦点设置在TreeView上
private void selectTreeViewItem(int dataGridViewRowIndex)
{
expandAllTreeViewNodes();
setTreeViewItem(dataGridViewRowIndex);
}
private void setTreeViewItem(int dataGridViewRowIndex)
{
int iterator = 0;
TreeNode tempNode = testStepTreeView.Nodes[iterator];
//don't need to actually return the integer...
iterator = findNode(tempNode, dataGridViewRowIndex, iterator);
testStepTreeView.Focus();
nodeFound = false;
}
private void expandAllTreeViewNodes()
{
if (testStepTreeView.Nodes.Count != 0)
{
foreach (TreeNode x in testStepTreeView.Nodes)
{
expandNode(x);
}
}
}
private void expandNode(TreeNode x)
{
if (x.IsExpanded == false)
{
x.Expand();
}
if (x.Nodes.Count > 0)
{
foreach (TreeNode y in x.Nodes)
{
expandNode(y);
}
}
}
private int findNode(TreeNode tempNode, int dataGridViewRowIndex, int iterator)
{
if (iterator > dataGridViewRowIndex)
{
return iterator;
}
if (iterator == dataGridViewRowIndex)
{
testStepTreeView.SelectedNode = tempNode;
nodeFound = true;
return iterator;
}
if (tempNode.Nodes.Count != 0)
{
iterator++;
if (iterator > dataGridViewRowIndex)
{
return iterator;
}
if (nodeFound == false)
{
iterator = findNode(tempNode.Nodes[0], dataGridViewRowIndex, iterator);
}
}
if (tempNode.NextNode != null)
{
iterator++;
if (iterator > dataGridViewRowIndex)
{
return iterator;
}
if (nodeFound == false)
{
iterator = findNode(tempNode.NextNode, dataGridViewRowIndex, iterator);
}
}
return iterator;
}