C# 如何使焦点保持在同一个树列表节点上?

C# 如何使焦点保持在同一个树列表节点上?,c#,winforms,devexpress,treelistview,C#,Winforms,Devexpress,Treelistview,文档结构 表格1: -专题讨论1:gridView -小组2:树人 -Panel3:-用户控件(取决于选定的树节点) 场景\u 1: -用户。在网格中选择一行。 -代码。向变量发送gridView中焦点所在行的“ID”值。(由gridView事件处理)。 -代码。默认情况下,焦点放在节点“node_1”树列表上(由gridView事件处理) -用户。在树列表中选择一个节点。 -在Panel3中,显示一个UserControl,它对应于gridView中的“ID”行和treeList中节点的“ID

文档结构
表格1:
-专题讨论1:gridView
-小组2:树人
-Panel3:-用户控件(取决于选定的树节点)

场景\u 1:
-用户。在网格中选择一行。
-代码。向变量发送gridView中焦点所在行的“ID”值。(由gridView事件处理)。
-代码。默认情况下,焦点放在节点“node_1”树列表上(由gridView事件处理)

-用户。在树列表中选择一个节点。
-在Panel3中,显示一个UserControl,它对应于gridView中的“ID”行和treeList中节点的“ID”(由treeList事件处理)

场景2:
使用者仅在gridView中的行之间移动焦点,
在树列表中,焦点始终位于同一节点上。
问题:Panel3显示用户控件“UserControl\u 1”,它仅与网格\u 1“row\u 1”匹配。
如何做到这一点:
-面板1---面板2---面板3
-“行\ 1”-“节点\ 1”-“用户控件\ 1”
-“行_2”-“节点_1”-“用户控制_2”
-“行_3”-“节点_1”-“用户控制_3”

问题。
如何解决“场景2”问题


您还需要在gridView1\u FocusedRowChanged事件处理程序中配置当前UserControl。如果最终用户在TreeList中选择了一个节点,TreeList 2_AfterFocusNode事件也将被引发,并且当前UserControl将相应地更改

我不太明白。你能给我一个示例代码吗。如果我理解正确,我是根据你的话编写代码的。参见代码。1.我对你的建议理解正确吗?解决方案2我在
gridView1\u FocusedRowChanged
事件结束时尝试在focusnode(对象发送方,NodeEventArgs e)后强制调用树列表2\u,但我不知道如何正确执行。2.如何在FocusNode(????)之后强制调用treeList2_。“解决方案2”有效吗?你能帮我解决这个问题吗?谢谢。我已经看过你的代码了。看起来是对的。通常,您不需要调用AfterFocusNode事件。将代码移动到单独的方法并在gridView1_FocusedRowChanged和treeList2_AfterFocusNode事件处理程序中调用此方法就足够了。您已经在这里共享的代码中执行了此操作。
 private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
{
    try
    {                
        idParser = Convert.ToInt32(gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "ID"));                

        TreeListNode nodeFocus = treeList2.FindNodeByKeyID(20);
        treeList2.SetFocusedNode(nodeFocus);
    }
    catch (Exception)
    {
        return;        
    }
}


        private void treeList2_AfterFocusNode(object sender, NodeEventArgs e)
        {
            int idNode = Convert.ToInt32(e.Node.GetValue("ID")); // "ID" вбыранного узла

            switch (idNode)
            {
                case 20: 

                    pathToSettingsMain = maskPath + idParser.ToString() + ".xml";                                                                                               

                    f01startURLs = new F01StartURLs(pathToSettingsMain);
                    splitContainer2.Panel2.Controls.Clear();
                    splitContainer2.Panel2.Controls.Add(f01startURLs);

                    userControlCurent = f01startURLs;

                    break;

            }