工作表中存在两个激活对象:选区范围和焦点单元格。
选区范围包含多个单元格,可以通过用户操作(鼠标或键盘)或编程方式进行选择。通常用于执行工作表上的范围操作,例如设置样式和边框、删除范围内容或将内容复制到剪贴板。下图展示了范围 B2:D3 的选区效果:
一个不带背景填充的高亮单元格即为焦点单元格:
要获取或设置工作表的选区,使用工作表的 SelectionRange 属性:
// 获取当前选区范围
var range = sheet1.SelectionRange;
// 设置选区范围为 A1:D5
sheet1.SelectionRange = ReoGrid.RangePosition("A1:D5");
要更改选区样式,使用工作表的 SelectionStyle 属性:
sheet1.SelectionStyle = ReoGrid.WorksheetSelectionStyle.FocusRect;
支持以下样式:
可以更改工作表的选区模式:
sheet1.SelectionMode = ReoGrid.WorksheetSelectionMode.Row;
支持以下模式:
| 枚举值 | 描述 |
|---|---|
| None | 不允许在工作表上选择任何内容 |
| Cell | 仅允许选择单个单元格 |
| Range | 允许选择单元格或范围 |
| Row | 每次选择一个或多个整行 |
| Column | 每次选择一个或多个整列 |
要检测选区变化,使用 SelectionChanged 或 SelectionChanging 事件:
sheet1.SelectionChanged = function(sender, e) {
win.msgbox(sheet1.SelectionRange.ToAddress());
}
SelectionChanged 在选区变化后触发。如果用户在选区操作过程中拖动鼠标,只会触发 SelectionChanging。工作流程如下:
SelectionChanged)SelectionChanging)SelectionChanged)这两个事件只有在选区实际发生变化时才会触发一次。
ReoGrid 确保焦点单元格始终包含在选区范围内。当选区范围变化时,焦点单元格也会随之变化;反之当焦点单元格变化时,选区范围也会变化,此时焦点单元格等同于选区范围。
要更改焦点单元格位置,使用工作表的 FocusPos 属性:
// 获取当前焦点位置
var focusPos = sheet1.FocusPos;
// 设置焦点位置为 D5
sheet1.FocusPos = ReoGrid.CellPosition("D5");
默认情况下,在工作表上按 Enter 键时焦点单元格会向右移动(水平方向):
可以将移动方向改为垂直方向,更改后焦点单元格会移动到下一行的单元格:
要将焦点单元格移动方向从水平改为垂直:
sheet1.SelectionStyle = ReoGrid.WorksheetSelectionStyle.FocusRect;
当用户尝试更改选区但尚未执行内置操作时,会触发 BeforeSelectionRangeChange 事件。通过设置事件参数的 IsCancelled 属性可以阻止执行内置操作。
此事件还包含允许用户代码更改选区范围的属性。以下示例展示如何限制选区操作的最大行数和列数。
为 BeforeSelectionRangeChange 事件添加处理程序:
sheet1.BeforeSelectionRangeChange = function(sender, e) {
// 计算行数差异
var rows = math.abs(e.StartRow - e.EndRow);
// 如果行数超过5行则限制范围
if (rows >= 5) {
if (e.EndRow > e.StartRow) {
e.EndRow = e.StartRow + 5 - 1;
} else {
e.EndRow = e.StartRow - 5 + 1;
}
}
}