Spread for Windows Forms高级主题(3)---单元格的编辑模式

理解单元格的编辑模式

通常情况下,当终端用户双击单元格时,编辑控件将允许用户在该单元格中输入内容。在一个单元格中编辑的能力被称为编辑模式。一些属性和方法可以用来自定义编辑模式的使用。

当一个单元格处于编辑模式时,活动单元格将显示一个I型光标,如下图所示。当该单元格不处于编辑模式时,活动单元格将显示一个焦点长方形,如下图所示。


处于编辑模式下的单元格


被选中但是并不处于编辑模式下的单元格

一个单元格将进入编辑模式(开启编辑模式),当:

  • 用户在单元格中输入内容
  • 用户双击单元格
  • EditMode属性设置为true

一个单元格离开编辑模式(关闭编辑模式),当

  • 用户按下回车键
  • 用户激活了另外一个单元格
  • 应用程序丢失焦点
  • EditMode属性设置为false

当一个单元格进入编辑模式,默认情况下,光标位于单元格中文本的末端。你可以设置EditModeReplace属性,将光标改变为选择单元格中存在的文本。

如果你愿意,你可以使用EditModePermanent属性指定一个单元格,当该单元格变为活动单元格时一直处于编辑模式。

当一个单元格进入编辑模式时,触发EditModeOn事件;当一个单元格离开编辑模式时,触发EditModeOff事件。当编辑控件得到焦点时,你可以使用SuperEditBase.EditModeCursorPosition属性设置光标在该控件中的位置。

你可以使用StartCellEditing 和 StopCellEditing方法启动和结束编辑模式。

阻止单元格获取焦点

你可以防止单元格获得焦点,从而禁止终端用户点击该单元格。你可以通过设置单元格的CanFocus属性控制焦点的设置,这些设置通过键盘输入和鼠标操作进行定义。

为单元格自定义焦点指示器

聚焦框向终端用户显示了被选中的单元格和活动的单元格。默认情况下,当单元格被选中时,该单元格有一个纯色聚焦框,如下图所示。如果一整列(或者一整行)被选中,该列的第一个单元格(或者该行的)就会得到焦点,同时该列(或者该行)会被高亮,如图所示。活动单元格的行头或者列头也会有不同的背景色。


被选中的每一个单元格的聚焦指示器


被选中列的聚焦指示器

你可以使用Spread的FocusRenderer属性(这个属性使用IFocusIndicatorRenderer接口)自定义活动单元格的聚焦指示器。对于动画指示符来说,你需要IAnimatedFocusRenderer接口。你也可以改变活动表头的选定颜色。

下表总结了聚焦指示器的几种类型以及与之相对应的类。


类型



默认


DefaultFocusIndicatorRenderer


动画


AnimatedDefaultFocusIndicatorRenderer


自定义行


CustomFocusIndicatorRenderer


编辑


EditingFocusIndicatorRenderer


扩展


EnhancedFocusIndicatorRenderer


图片


ImageFocusIndicatorRenderer


跑马灯线


MarqueeFocusIndicatorRenderer


实线


SolidFocusIndicatorRenderer

DefaultFocusIndicatorRenderer是其它类的基类。ImageFocusIndicatorRenderer允许你使用一个图片作为聚焦指示器。SolidFocusIndicatorRenderer允许你自定义 一个实心的边框围绕着选中单元格作为聚焦指示器。

在Spread设计器中,你可以使用聚焦指示编辑器自定义聚焦指示器。

获取点击过的单元格的信息

你可以获得行和列的单元格索引信息,这个单元格通过CellClickEventArgs类中的CellClick事件的参数e点击访问。你也可以从这个参数中得到X和Y坐标。你可以实现一个MouseDown事件,并从X和Y坐标中获取点击过的单元格的行和列索引信息。根据FpSpread类中的GetCellFromPixel方法,你可以获取CellRange类中的目标单元格信息。你也可以从各自的成员中获取行和列的信息。

你可以获取单元格中诸如位置,规格等信息,这些信息都是被行索引列索引所指定。当FpSpread类中的GetCellRectangle方法被调用,它会指定目标行或者列索引。单元格坐标信息是以.NET框架的矩形格式返回的。

对表头来说,通过访问CellClickEventArgs类中的CellClick事件参数e,你可以得到已经被点击的表头的行和列索引信息。你可以检测这些表头是否被点击。你也可以从这个参数中获取x坐标和y坐标。你可以实现一个MouseDown事件,从 X和Y坐标中获取已经被点击的表头单元格的行和列的索引信息。

通过使用FpSpread类中的GetColumnHeaderCellFromPixel方法,你可以为列单元格获取CellRange类格式中的目标单元格信息。你可以从各自的成员中获取列表头里的行和列的信息。在有行头单元格的情况下,调用GetRowHeaderCellFromPixel方法。

向单元格中添加备注

你可以添加一个备注到一个单元格或单元格区域。备注可以包括诸如评论、问题,或者描述单元格值的由来的文本。每一个有备注显示的单元格在单元格的右上角显示了一个单元格备注指示器(默认情况下是一个小的红色的框)。当指针在有一条备注的单元格的指示符上的时候,备注文本显示在单元格旁边的一个文本框中。另外你可以设置你的单元格备注总是显示,而不只是当鼠标移向指示符时候显示。对于弹出的单元格备注而言,它们的显示方式类似于文本提示。当指针在单元格的备注指示器上时,就会显示单元格备注文本。这一点在下面图中有所展现。

在单元格的右上角的红色方块表示该单元格的一个可用备注,如下图所示。你可以使用CellNoteIndicatorVisible属性隐藏单元格备注指示器当指针在单元格备注上时,可以使用单元格的NoteIndicatorPosition属性设置备注的位置。

自定义单元格备注行为

你可以允许备注保持显示的状态,就好像它们是即时贴一样。在这种情况下,他们出现在一个单元格旁边的矩形框中,以一条可伸缩的线与要说明的单元格相连,以便备注可以被用户方便地移动。一个被选中的即时贴的示例如下图所示。这个单元格的NoteStyle属性必须使用 StickyNote枚举类型以便允许此操作。即时贴在这种情况下是一个可移动的图形。

为了移动备注,当指针在备注上时,单击鼠标左键 选择它,将它拖曳到目标位置,并且释放鼠标左键以将其置于正确位置。单元格备注指示器上的即时贴延伸出的线可以适应备注的任何位置。

你可以允许用户编辑单元格备注,如果备注始终显示。为了让用户对其进行编辑,设置表单中的AllowNoteEdit属性,这样的设置使得该表中的所有即时贴备注都是可以由用户编辑的。

对于终端用户来说,单元格备注可以用来保存一些额外信息。你还可以允许用户在单元格中附加他们自己的信息,该信息可以是任何对终端用户有用的信息。例如终端用户可能会利用单元格备注来说明单元格值的来源(单元备注=“这个值来源于消费者报告七月号杂志的一篇文章”)。

你可以进一步自定义备注的使用:

  • 根据内容自动调整单元格备注的大小
  • 自定义单元格备注的位置
  • 生成即时贴标签这样它们可以粘滞在它生成的地方
  • 自定义备注指示器
  • 打印单元格备注

还有可用于自定义单元格备注外观的其他类 。给备注使用StickyNoteStyleInfo 类。

了解局限性

有一些单元格备注使用和显示的限制:

  • 当单元格对象的 NoteStyle 属性 被设置为隐藏时,此备注不显示。
  • 当该单元格类型的IsReservedLocation方法被设置为true时,此备注并不会显示在某些类型的单元格中。这种情况可能会发生在一个复选框单元格中,或在不可编辑的组合框单元格中,或者当光标移动到超链接单元格中的时候。
  • 当单元格处于编辑模式时,单元格备注指示器并不会出现 。
  • 一个锚单元格的单元格备注显示了一个单元格合并区域,但是合并区域中的任何其它单元格的单元格备注都不会显示。
  • 选择红色作为单元格的背景,以显示单元格中包含一个红色的单元格备注作为警告。单元格备注指示器可能在红色的背景中是不可见的。

自定义单元格备注指示器

你可以改变单元格备注指示器的大小和颜色。单元格备注指示器的默认大小是一个3x3的正方形,但是 你可以修改NoteIndicator的宽度或高度为任何 正整数。单元格备注指示器的默认颜色 是红色的,但你可以给它分配任何颜色值。下图中显示了 使用默认值的指示器和使用自定义值的自定义指示器。使用NoteIndicatorColor 和NoteIndicatorSize属性,你可以设置自定义值。

这段示例代码为单元格区域设置了可编辑的单元格备注,并设置单元格备注指示器的颜色为绿色(而不是默认的红色)。

fpSpread1.Sheets[0].AllowNoteEdit = true;

fpSpread1.Sheets[0].Cells[1, 1, 3, 3].Note = "test";

fpSpread1.Sheets[0].Cells[1, 1, 3, 3].NoteIndicatorColor = Color.Green; 

fpSpread1.Sheets[0].Cells[1, 1, 3, 3].NoteStyle = FarPoint.Win.Spread.NoteStyle.StickyNote;

 

Spread for Windows Forms 5.0 中文版下载地址

附:Spread for Windows Forms高级主题系列文章

Spread for Windows Forms高级主题(1)---底层模型

Spread for Windows Forms高级主题(2)---理解单元格类型

 

相关阅读:

Spread for Windows Forms 7新功能使用指南

Spread Studio 10.0v1 发布

SpreadJS 10.0v1 发布

 

时间: 2024-09-17 00:25:21

Spread for Windows Forms高级主题(3)---单元格的编辑模式的相关文章

Spread for Windows Forms高级主题(4)---自定义用户交互

你可以从多方面自定义用户界面来自定义用户与Spread控件的交互方式.同时,你还可以自定义如何处理用户交互方式. 设置允许用户进行的操作 下面的列表总结了通过控件的数据区域,你可以授权用户进行的操作(或者限制用户进行的操作). 允许的用户功能 相关属性或方法 拖拽单元格数据 FpSpread.AllowDragDrop 属性 拖拽并填写单元格数据 FpSpread.AllowDragFill 属性 编辑单元格备注 SheetView.AllowNoteEdit 属性 输入公式 FpSpread.

Spread for Windows Forms高级主题(6)---数据绑定管理

自定义列和区域的数据绑定 当表单被绑定到一个数据集时,表单中的列就会相继的被分配到数据集的区域上.例如,第一个数据域分配给列A,第二个数据区域分配给列B,等等.你也可以改变分配顺序,将任意域分配给任意列. 默认情况下,绑定的表单继承数据库中列的宽度.如果你想要设置你自己的列宽,你可以在绑定Spread控件之后设置列宽,或者将DataAutoSizeColumns属性设置为false并设置列宽. 如果你将多个Spread控件绑定到了一个单一的数据集,你可以将每一个Spread控件中表单的AutoG

Spread for Windows Forms高级主题(8)---通过暂停布局提高性能

一种改善控件性能的方法是,当需要对许多单元格进行变动时,可以先保持或挂起重画,直到所有的变动都完成时再进行.通过在对单元格修改和重算时保持重画(挂起布局),然后再恢复布局并重画所有单元格控件能够节省很多时间,并且仍然能为用户展现一个全新的界面. 布局对象 布局是一个对象,它保存了计算后的值(像单元格的宽度和高度,合并,以及视图),用来绘制控件的当前状态.这些值可能包括到底有多少视图,每一个视图左上方的单元格是什么,每一行及每一列有多大以及每一个视图有多少单元格是当前可见的,等等.使用布局对象的目

Spread for Windows Forms高级主题(5)---数据处理

使用表单的API处理数据 你可以将数据以有格式或无格式字符串或者数据对象的形式填充到单元格中.将数据填充到单元格的最好方式取决于你想添加字符串数据还是数据对象,以及你想添加数据到单一的单元格还是某个范围内的所有单元格. 举例来说,如果你使用的数据来自用户的文本框中,你可能想要添加由Spread控件解析的字符串数据.如果你想要添加多个值,并想要直接将它们添加到数据模型中,可以以对象的方式添加它们. 下表汇总了在表单级别添加数据的方法. 数据描述 单元格数目 方法名 具有格式的字符串(例如"$1,2

Spread for Windows Forms快速入门(8)---单元格中用户动作触发的事件

这篇文章概括介绍了单元格的哪些事件是由控件的用户动作触发的.虽然它没有全面地列出的用户可能执行的每一个动作,但是它详细地描述了用户所使用的大部分普通操作所引发的事件. 因为某些动作一直出现,或者某些动作反复出现, 我们就在列表中放弃了这部分动作.举例来说,这些列表并不包括MouseMove, MouseHover, MouseEnter, MouseLeave, Invalidated和CursorChanged事件. 如果你想在此基础上做进一步的研究,我们提供了一个示例以便你与Spread控件

Spread for Windows Forms高级主题(1)---底层模型

底层模型概述 Spread控件提供了很多模型,这些模型提供了自定义控件的基础架构.同时,这些模型作为底层模板,派生出了更多通用的快捷对象. 在不使用Spread的底层模型的情况下,你可以完成许多任务.通过使用Spread设计器或者快捷对象(如单元格.列和行)的属性,你可以在表单上实现许多改变.但是因为表单模型是所有快捷对象的基础,因此在通常情况下,使用表单模型要比使用快捷对象的速度要快.例如,在代码中使用快捷对象设置一个属性值: fpSpread1.Sheets[0].Cells[0, 0].V

Spread for Windows Forms快速入门(7)---单元格的交互操作

单元格的编辑模式 通常情况下,当终端用户双击单元格时,编辑控件将允许用户在该单元格中输入内容.在一个单元格中编辑的能力被称为编辑模式.一些属性和方法可以用来自定义编辑模式的使用. 当一个单元格处于编辑模式时,活动单元格将显示一个I型光标,如下图所示.当该单元格不处于编辑模式时,活动单元格将显示一个焦点长方形,如下图所示. 处于编辑模式下的单元格 被选中但是并不处于编辑模式下的单元格 一个单元格将进入编辑模式(开启编辑模式),当: 用户在单元格中输入内容 用户双击单元格 EditMode属性设置为

Spread for Windows Forms快速入门(14)---文件操作

你可以将数据从Spread中存到几种不同类型的文件中或者可以在Spread中打开几种不同类型的数据文件.通过使用相应的代码,你可以将整个控件,某个特定的表单,或者某个特定单元格区域中的数据保存为几种不同的文件类型或者流.类似的,你可以允许用户对某几种文件类型进行文件操作. 保存到Excel文件 你可以使用ExcelSaveFlags枚举类型的UseOOXMLFormat选项,将数据保存到Excel格式文件(BIFF8 格式)或者Excel 2007 XML 格式(xlsx).默认的,当你保存为E

Spread for Windows Forms快速入门(11)---数据筛选

Spread支持开发人员自定义筛选数据的用户体验.基于行数据筛选,你可以允许用户分列进行筛选,从而仅显示符合了下拉列表中条件的行的数据,或者根据筛选结果更改行的外观.你可以使用默认的筛选方式,或者你可以从实际出发,自定义筛选器的每一个方面. 允许用户进行行筛选 默认情况下,表单禁止用户对表单的行进行筛选.你可以开启这一特性, 允许用户在所有列或者指定的列中进行行筛选.根据你要隐藏被筛除的列,还是更改列的外观,分别使用HideRowFilter类或StyleRowFilter类. 使用列Allow