如何使焦点保持在同一treeList节点上?

时间:2018-12-04 06:17:30

标签: c# winforms devexpress treelistview

文档结构
表格_1:
-Panel1:-gridView;
-Panel2:-treeList;
-Panel3:-UserControl(取决于所选的树节点);

场景_1:
-用户。在网格中选择一行。
-代码。将gridView中焦点所在的行的“ ID”值发送到变量。 (由gridView事件处理)。
-代码。默认情况下,焦点放在节点“ Node_1” treeList(由gridView事件处理)上。

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

场景_2:
用户。仅在gridView中的行上移动焦点,
并且在treeList中,焦点始终位于同一节点上。
问题:Panel3显示用户控件“ UserControl_1”,该控件仅与grid_1“ row_1”匹配。
如何实现:
-Panel1 --- Panel2 ----- Panel3
-“ lines_1”-“ Node_1”-“ UserControl_1”;
-“ lines_2”-“ Node_1”-“ UserControl_2”;
-“ lines_3”-“ Node_1”-“ UserControl_3”;

问题。
如何解决“ Scenario_2”问题?

 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;

            }

1 个答案:

答案 0 :(得分:1)

您还需要在gridView1_FocusedRowChanged事件处理程序中配置当前的UserControl。如果最终用户在TreeList中选择一个节点,则还会引发treeList2_AfterFocusNode事件,并且相应地更改当前的UserControl。