# dotNet.ReoGrid 扩展库 - 选择与编辑

修改默认行为
---------------------------

### 修改焦点单元格移动方向为下一行而非下一单元格

工作表的`SelectionForwardDirection`属性用于决定编辑完成后焦点单元格的移动方向。默认情况下，ReoGrid会将焦点移动到同一行的下一个单元格。

```aardio
// 向右移动（下一个单元格）
sheet1.SelectionForwardDirection = ReoGrid.SelectionForwardDirection.Right;
```

![164](../images/164.png)

```aardio
// 向下移动（下一行的单元格）
sheet1.SelectionForwardDirection = ReoGrid.SelectionForwardDirection.Down;
```

![165](../images/165.png)

此外，可以通过处理以下两个事件来自定义选择位置：
* Worksheet.SelectionMovedForward (回车键)
* Worksheet.SelectionMovedBackward (Shift+回车键)

这两个事件都有`IsCancelled`属性，可用于阻止内置的默认操作。要移动到自定义位置，代码如下：

```aardio
sheet1.SelectionMovedForward = function(sender,e) e.IsCancelled = true;
sheet1.SelectionMovedBackward = function(sender,e) e.IsCancelled = true;
// 将选择移动到新位置
sheet1.SelectionRange = ReoGrid.RangePosition(sheet1.SelectionRange.Row + 1, 0, 1, 1);
```

### 通过键盘事件处理修改下一个位置

可以处理`BeforeCellKeyDown`事件来响应用户按键操作。将`IsCancelled`属性设为true可阻止默认操作，并自定义选择位置。

```aardio
sheet1.BeforeCellKeyDown = function(sender,e){
    if(e.KeyCode == System.Windows.Forms.Keys.Enter){
        e.IsCancelled = true;
        // 总是移动到下一行的第一个单元格
        sheet1.SelectionRange = ReoGrid.RangePosition(sheet1.SelectionRange.Row + 1, 0, 1, 1);
    }
}
```

### 修改选择模式

可以为每个工作表设置不同的选择模式：

```aardio
sheet1.SelectionMode = ReoGrid.WorksheetSelectionMode.Row;
```

支持以下模式：

| **枚举值** | **描述** |
| :-- | :-- |
| None | 不允许选择任何内容 |
| Cell | 仅允许选择单个单元格 |
| Range | 允许选择单元格或范围 |
| Row | 总是选择整行 |
| Column | 总是选择整列 |

### 自定义选择范围限制

当用户尝试改变选择范围时，会触发`BeforeSelectionRangeChange`事件。通过设置事件参数的`IsCancelled`属性可以阻止默认操作。

以下示例展示如何限制选择的最大行数和列数：

#### 限制选择范围的最大行数和列数

添加`BeforeSelectionRangeChange`事件处理：

```aardio
sheet1.BeforeSelectionRangeChange = worksheet_BeforeSelectionRangeChange;
```

通过修改选择结束位置来限制最大行数为5：

```aardio
function worksheet_BeforeSelectionRangeChange(sender,e){
    var rows = math.abs(e.StartRow - e.EndRow);
    if(rows >= 5){
        if(e.EndRow > e.StartRow)
            e.EndRow = e.StartRow + 5 - 1;
        else
            e.EndRow = e.StartRow - 5 + 1;
    }
}
```

### 禁用单元格数据自动格式化

当用户在单元格中输入数据时，ReoGrid会尝试自动格式化单元格。要禁用此行为：

```aardio
sheet1.SetSettings(ReoGrid.WorksheetSettings.Edit_AutoFormatCell, false);
```

更多工作表设置请参考设置。

### 修改百分比输入方式

默认情况下，当用户编辑百分比类型单元格时，ReoGrid会在文本末尾添加%符号。要禁用此行为：

```aardio
sheet1.SetSettings(ReoGrid.WorksheetSettings.Edit_FriendlyPercentInput, false);
```

更多工作表设置请参考设置。

内置默认键盘操作
------------------------------------

支持的快捷键列表。

修改选择样式
---------------------------

可以通过工作表的SelectionStyle属性修改选择样式。

### 默认样式

```aardio
sheet1.SelectionStyle = ReoGrid.ReoGridSelectionStyle.Default;
```

![161](../images/1611.png)

### Windows焦点样式

```aardio
sheet1.SelectionStyle = ReoGrid.ReoGridSelectionStyle.FocusRect;
```

![162](../images/162.png)

### 隐藏选择

也可以设置为None来隐藏选择：

```aardio
sheet1.SelectionStyle = ReoGrid.ReoGridSelectionStyle.None;
```

![163](../images/163.png)

[显示/隐藏工作簿组件](#显示隐藏工作簿组件)
---------------------------------------

#### 隐藏工作表标签控件

```aardio
var workbook = grid;
workbook.SetSettings(ReoGrid.WorkbookSettings.View_ShowSheetTabControl, false);
```

隐藏滚动条和表头：

```aardio
workbook.SetSettings(
    ReoGrid.WorkbookSettings.View_ShowScrolls | 
    ReoGrid.WorkbookSettings.View_ShowHeaders, 
    false
);
```

隐藏行和列标题：

```aardio
var sheet1 = workbook.CurrentWorksheet;
sheet1.SetSettings(ReoGrid.WorksheetSettings.View_ShowHeaders, false);
```

效果如下：

![30](../images/30.png)

#### 隐藏网格线

```aardio
sheet1.SetSettings(ReoGrid.WorksheetSettings.View_ShowGridLine, false);
```

![31](../images/31.png)

禁用通过鼠标调整行高和列宽：

```aardio
sheet1.SetSettings(
    ReoGrid.WorksheetSettings.Edit_AllowAdjustRowHeight | 
    ReoGrid.WorksheetSettings.Edit_AllowAdjustColumnWidth, 
    false
);
```

只读模式
---------------------

在此模式下，工作表中的所有编辑操作将被禁用。

```aardio
sheet1.SetSettings(ReoGrid.WorksheetSettings.Edit_Readonly, true);
```

所有可用设置
---------------------------

完整设置列表请参考设置。