本主题提供了关于在运行时刻单元格之间移动焦点的信息,以及如何指定获得焦点的单元格的外观。 当需要协助最终用户输入数据时,在运行时刻移动单元格焦点可能是有用的。 这允许自动把焦点移动到所需的单元格,因此不需要最终用户在视图中定位。 本主题仅描述在单元格间移动焦点的基础信息。 关于该课题的附加信息,请参阅 在行间移动焦点 主题。
为单元格设置焦点
获得焦点的单元格是最终用户可以使用键盘交互操作的数据单元格。 例如,最终用户可以按下 F2 键来激活单元格的编辑器。 注意,网格控件可以呈现主/从数据,因此可能显示多个视图,每个视图都有自己的获得焦点的单元格。 对于实际响应键击的获得焦点的单元格,它所在的视图由网格控件的 GridControl.FocusedView 属性来确定。
视图中获得焦点的单元格是由获得焦点的行和列来标识的。 分别由视图的 ColumnView.FocusedRowHandle 和 ColumnView.FocusedColumn 属性指定获得焦点的行和列。 请参阅 行与卡片识别 和 访问和识别列 主题获得关于为这些属性提供取值的细节。
把行句柄指派到视图的 ColumnView.FocusedRowHandle 属性,则滚动视图并展开已折叠的组,因此指定的行在屏幕上是可视的。 在使用其他成员 (例如,当使用在 在行间移动焦点 主题中描述的方法) 设置获得焦点的行时,也产生同样的行为。 类似地,当把 ColumnView.FocusedColumn 属性设置为当前不可视的列时出会导致滚动,视图被水平滚动来让该列可视。 ColumnView.FocusedColumn 属性也可以接受已隐藏的列 (GridColumn.Visible 属性值为 false 的列)。 在这种情况下,指定的列将获得焦点,但仍然不可视。
下面的示例展示了如何定位和把焦点设置到 Country 列中的一个包含了“Japan”的单元格。 注意,使用 ColumnView.LocateByDisplayText 方法来定位行。 请参阅 行定位 主题获得相关细节。
C# | 复制代码 |
---|---|
using DevExpress.XtraGrid.Views.Base; using DevExpress.XtraGrid.Columns; // ... string searchText = "Japan"; // obtaining the focused view ColumnView View = (ColumnView)gridControl1.FocusedView; // obtaining the column bound to the Country field GridColumn column = View.Columns["Country"]; if(column != null) { // locating the row int rhFound = View.LocateByDisplayText(view.FocusedRowHandle + 1, column, searchText); // focusing the cell if(rhFound != GridControl.InvalidRowHandle) { View.FocusedRowHandle = rhFound; View.FocusedColumn = column; } } |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.XtraGrid.Views.Base Imports DevExpress.XtraGrid.Columns ' ... Dim searchText As String = "Japan" ' obtaining the focused view Dim View As ColumnView = gridControl1.FocusedView ' obtaining the column bound to the Country field Dim column As GridColumn = View.Columns("Country") If Not column Is Nothing Then ' locating the row Dim rhFound As Integer = View.LocateByDisplayText(view.FocusedRowHandle + 1, column, searchText) ' focusing the cell If (rhFound <> GridControl.InvalidRowHandle) Then View.FocusedRowHandle = rhFound View.FocusedColumn = column End If End If |
可以通过为 GridControl.FocusedViewChanged、 ColumnView.FocusedRowChanged 和 ColumnView.FocusedColumnChanged 事件编写处理程序来管理焦点移动。 当把焦点移向另一个视图、行、列时,这些事件分别发生。 也要注意,可以阻止特殊的列被最终用户设置焦点。 禁用所需列的 OptionsColumn.AllowFocus 选项来实现此目的。
要获得关于最终用户如何更改单元格焦点的信息,请参阅 在行和单元格内导航 主题。
获得焦点的单元格的外观
在默认情况下, 获得焦点的单元格的外观由 GridViewAppearances.FocusedCell 属性指定。 在获得焦点的行内的其他单元格的外观由 GridViewAppearances.FocusedRow 属性指定。 注意,通过把 GridOptionsSelection.InvertSelection 属性设置为 true,可以改变这种默认行为。 在这种情况下,在浏览和编辑时,将分别使用 FocusedRow 和 FocusedCell 外观来绘制获得焦点的单元格。 获得焦点的行内的其他单元格与没有获得焦点的行有相同的外观。
使用 GridView.FocusRectStyle 属性,可以在获得焦点的单元格、获得焦点的整个行的周围绘制虚线焦点边框,或根本不绘制。