当在节点间导航时,把焦点从一个节点移向另一个。 在同一时刻始终只有一个获得焦点的节点 —— 接收和处理键击输入的节点。 本主题描述如何在 TreeList 控件中移动焦点。
焦点移动
通过 TreeList.FocusedNode 属性指定当前获得焦点的节点。 可以读取其取值来访问获得焦点的节点。 为此属性赋值会导致焦点移入指定的节点。
示例
下面的示例展示了如何把焦点移入特定的节点。 为了完成此任务,所需的节点被指派到了 TreeList.FocusedNode 属性。
C# | 复制代码 |
---|---|
// Move focus to the first root node.
treeList1.FocusedNode = treeList1.Nodes[0];
|
Visual Basic | 复制代码 |
---|---|
' Move focus to the first root node.
TreeList1.FocusedNode = TreeList1.Nodes(0)
|
这并非在节点间移动焦点的唯一方式。 其他移动焦点的方法可以划分为两组。 第一组方法允许在没有被隐藏于折叠组内的节点之间移动焦点。 这些方法是 TreeList.MoveNextVisible、TreeList.MovePrevVisible 和 TreeList.MoveLastVisible 方法。 这些方法分别允许把焦点移入下一个、前一个和最后一个可视的节点。
第二组方法允许遍历所有节点,而不考虑节点是否被隐藏在折叠组内。 这些方法是 TreeList.MoveNext、TreeList.MovePrev 和 TreeList.MoveLast 方法。 这些方法展开获得焦点的节点的所有父节点。
使用 TreeList.MoveFirst 方法把焦点移入 XtraTreeList 中的第一个节点。 此方法无配对,因为第一个节点始终是一个根结点,从而不能被隐藏。
我们考虑一个使用上面所提及的方法组的示例。 第一个屏幕截图显示了最初的获得焦点的节点。
下表可视地演示了两组方法之间的差异。
调用 MovePrevVisible 方法 | 调用 MovePrev 方法 |
---|---|
MovePrevVisible 方法把焦点移入“Sales and Marketing”节点 —— 前一个可视的节点。 |
MovePrev 方法展开前一个可视的“Sales and Marketing”节点,并且把焦点移入其最后一个子节点 —— “Marketing”。 |
我们来看另一个使用不同组中的导航方法的示例。 最初,“Consumer Electronics Div.”节点获得焦点。
下表以插图说明了在 TreeList.MoveNext 和 TreeList.MoveNextVisible 方法之间的差异。
调用 MoveNextVisible 方法 | 调用 MoveNext 方法 |
---|---|
MoveNextVisible 方法把焦点移入它的下一个可视节点 —— “Software Products Div.”。 |
MoveNext 方法把焦点移入“Consumer Electronics Div.”节点的第一个子节点。 |
响应焦点的移动
通过接管 TreeList.BeforeFocusNode、TreeList.AfterFocusNode 和 TreeList.FocusedNodeChanged 事件,可以响应节点间的焦点移动。
在节点获得焦点之前,TreeList.BeforeFocusNode 事件发生。 它允许识别之前获得焦点的节点、以及即将获得焦点的节点。 通过把 BeforeFocusNodeEventArgs.CanFocus 事件参数设置为 false,也可以取消当前的焦点操作。
在节点获得焦点之后,TreeList.AfterFocusNode 和 TreeList.FocusedNodeChanged 事件发生。 唯一区别是第二个事件提供了之前获得焦点的节点作为其参数。
示例
下面的示例通过接管 TreeList.BeforeFocusNode 事件,禁止把焦点移入控件中的第一个节点。
C# | 复制代码 |
---|---|
private void treeList1_BeforeFocusNode(object sender, DevExpress.XtraTreeList.BeforeFocusNodeEventArgs e) { if (e.Node.Id == treeList1.Nodes[0].Id) e.CanFocus = false; } |
Visual Basic | 复制代码 |
---|---|
Private Sub TreeList1_BeforeFocusNode(ByVal sender As Object, ByVal e As DevExpress.XtraTreeList.BeforeFocusNodeEventArgs) Handles TreeList1.BeforeFocusNode If e.Node.Id = TreeList1.Nodes(0).Id Then e.CanFocus = False End If End Sub |