【问题标题】:How to make the focus remain on the same treeList node?如何使焦点保持在同一个treeList节点上?
【发布时间】:2019-05-05 12:22:40
【问题描述】:

文档结构
表格_1:
- 面板 1:- 网格视图;
- 面板 2:- 树列表;
- 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”。
如何实现:
- 面板 1 --- 面板 2 ----- 面板 3
- “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;

            }

【问题讨论】:

    标签: c# winforms devexpress treelistview


    【解决方案1】:

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

    【讨论】:

    • 我不太明白。你能显示一个示例代码吗?如果我理解正确,我根据你的话制作了代码。见代码。 codeshare.io/anlQK4 1. 我是否正确理解了您的建议? Solution_2 我尝试在gridView1_FocusedRowChanged 事件结束时强制调用treeList2_AfterFocusNode (object sender, NodeEventArgs e) 但我不知道如何正确执行。 2. 如何强制调用treeList2_AfterFocusNode(???, ???)。 “Solution_2”会起作用吗?
    • 你能帮忙解决这个问题吗? link 谢谢。
    • 我已经查看了您的代码。它看起来是正确的。通常,您不需要调用 AfterFocusNode 事件。将代码移动到单独的方法并在 gridView1_FocusedRowChanged 和 treeList2_AfterFocusNode 事件处理程序中调用此方法就足够了。您已经在此处共享的代码中执行了此操作。
    猜你喜欢
    • 2018-07-01
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多