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

简介:
理解单元格类型基本信息

Spread支持几十种单元格类型,如复选框单元格、日期时间单元格、或者一个简单的文本单元格。单元格类型可以对单独的单元格、列、行、一个单元格区域,甚至是整个表单进行设置。单元格类型决定了用户与单元格交互的方式,包括如何对数据进行访问、显示和校验等。单元格类型为单元格定义了一个editor用以处理输入数据,一个formatter用以分析和格式化数据,还有一个render用以控制单元格的数据如何显示。

Editor,Formatter,以及 Renderer

一个单元格类型包括一个editor,一个renderer,以及一个formatter。editor负责在编辑模式中,创建和控制单元格编辑控件。formatter负责转换单元格的值,转化为文本或者从文本格式进行 转换,(举例来说,当获取或者设置一个单元格的Text属性)。renderer负责绘制单元格(此时单元格不处于编辑模式)。

在大多数情况下,你想要此单元格无论是否在编辑模式,在外观上来看都是一样。在这种情况下,你只需要创建单一的单元格类型,并且将其设置为单元格的CellType属性。这种单一的单元格类型被用来创建单元格的editor,renderer,以及formatter。如果你想要根据是不是处于编辑模式来进行不同的外观显示,那么你就要创建两种单元格类型并且将一种单元格作为单元格editor的类型,另外一种设为单元格renderer的类型。你可能也想将一种单元格类型赋给单元格formatter. 更多相关信息,请参阅ICellType 接口。

EditBaseCellType

单元格编辑的设计需要单元格类型返回单元格之上的editor控件。单元格的editor控件可以以文本作为基础 (例如文本框)或者以图形为基础(例如复选框)。editor控件可以进行下拉列表(例如组合框)或者弹出对话框(例如日期选择器)。EditBaseCellType类是这样一种类,它是内置的以文本为基础的单元格类型(比如,一般信息,文本,数字,日期,等等)的来源。这个类也可以导出文本类型的自定义单元格类型。ISubEditor接口可以用来将以文本为基础的单元格editor和下拉列表联系起来(例如复选框)或者弹出对话框(例如日期/选择框)。数据模型可以持有数据,包括颜色。单元格类型常常在数据模型中传递原始数据。

头部单元格

头部的单元格是可以渲染的,但是是不可编辑的。虽然你可以将一种单元格类型赋给行头或者列头的单元格,但是单元格类型仅仅用来描绘。在单元格中,编辑操作被限制在数据区域的单元格中。如果你想将一些可编辑的部件像 表头那样进行操作,你可以将列头隐藏(或者关闭) ,将表单的第一行冻结,然后使用冻结的行作为你的伪头部单元格。

对象层次

Spread控件中的对象,例如表单、行和单元格等,有很多格式和其他的属性继承自它的 “父母”。一个单元格可以从一个表单中继承格式,例如背景颜色。如果你对一列中所有单元格的文本对齐方式进行了设置,则单元格同样继承了该对齐方式。由于对象继承,很多属性和方法可以使用不同的方式应用在表单的不同部分。

你可以重载一个独立的单元格所继承的格式,但对象默认继承父类的属性。所以在一个给定的上下文中,任何一个对象的设置综合了应用在其上的父类属性。例如,你可以为一个单元格在单元格级别上设置文本颜色,但它可能从其所在行继承了垂直对齐方式,从其所在列继承了边界属性,并从其所在表单继承了背景颜色。由于背景颜色可能在这些多个层次上被设置,因此必须采用某些优先级规则。

越靠近单元格级别,优先级越高。所以如果你在单元格中设置了背景颜色,那么从父类继承而来的设置将会被覆盖。请参阅如下的属性优先级列表。越靠近单元格(数字越小),优先级越高。

1. 单元格

2. 行

3. 列

4. 交替行

5. 表单

6. 控件

下面的示例代码把表单的背景设为黄色,第二行和第三行的背景设为绿色,第三列的背景设为蓝色,第三行第三列的单元格背景设为红色。可以从效果图上看出表单、列、行和单元格之间的优先级关系。

fpSpread1.Sheets[0].DefaultStyle.BackColor = Color.Yellow; fpSpread1.Sheets[0].Rows[1].BackColor = Color.Green; fpSpread1.Sheets[0].Rows[2].BackColor = Color.Green; fpSpread1.Sheets[0].Columns[2].BackColor = Color.Blue; fpSpread1.Sheets[0].Cells[2,2].BackColor = Color.Red;

image

自定义弹出的日期时间控件

如果你在编辑模式下按下F4键或者双击的日期时间单元格,一个弹出日历(或者弹出时钟)就会显示。如果你将格式设置为TimeOnly,那么就会显示一个时钟控件。你在日历中选择的日期(或者在时钟中选择的时间)被放置在日期时间单元格中。如果你想要显示日期与时间,你可以在日历控制中点击“Today”;如果你想要显示时间,你可以在时钟控制里点击“Now”。

弹出日历控件

弹出时钟控件

image image

你可以指定日期和月份的常规名称和缩写名称,并且可以指定控件底部按钮的文本。使用 DateTimeCellType类的SetCalendarText 方法对它们进行设置。

请注意按钮中心显示的文本。请尽量把将文本长度限制为8或9个字符。虽然按钮可以显示10个字符,但第一个和最后一个字符将会非常接近按钮的边缘。

当使用控件时,仅需点击确定或取消按钮关闭控件。“Today”(或者“Now”)按钮可以简单地将单元格中的值设置为当前日期(或时间)。

更多有关日期和时间单元格格式的设置,请参阅DateTimeFormat 枚举类型。

下面的示例代码设置按钮的文本,并且在数组列表中指定日期和月份的名称。

FarPoint.Win.Spread.CellType.DateTimeCellType datecell = new FarPoint.Win.Spread.CellType.DateTimeCellType(); string[] daynames = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; string[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; string[] dayabbrev = {"Su","My","Ty","Wy","Th","Fy","Sy"}; string[] mthabbrev = {"Jy","Fy","Mh","Al","My","Jn","Jl","At","Sr","Or","Nr","Dr"}; string okbuttn = "Fine"; string cancelb = "Quit"; datecell.DateTimeFormat = FarPoint.Win.Spread.CellType.DateTimeFormat.UserDefined; datecell.UserDefinedFormat = "dddd MMMM d, yyyy"; datecell.SetCalendarText(daynames,months,dayabbrev,mthabbrev,okbuttn, cancelb); fpSpread1.ActiveSheet.Cells[1, 1].CellType = datecell; fpSpread1.ActiveSheet.Cells[1, 1].Value = System.DateTime.Now; fpSpread1.ActiveSheet.Columns[1].Width = 130; 自定义自动完成(预先键入)

你可以根据用户在单元格中的输入进行自动完成(预先输入),使用IAutoCompleteSupport 接口及其属性以便在可编辑单元格中提供自动完成的特性。

image

基本上有两个属性可以进行设置。第一个你可以设置自动完成的模式,如上图所示。这个选项包括提示一个可能的单词或一个可能的自动完成的下拉列表,或是两者都有,又或是两者都没有。

第二个属性,你可以设置自动完成的来源。这个来源被当做是自动完成的项目的列表。你可以创建一个自定义源并且定义你自己的项目清单,或者你可以设置不同的系统资源为源。接口中有两种属性提供对自定义源的设置。第一个是为自定义源设置可能的候选选项。第二个是设置是否使用此列中的其他单元格的数值列表填充该列表。要使用该列的单元格中的数据,例如,你可以设置源为自定义源,然后开启自动补齐。如果条目在单元格的上面或者下面没有空白的单元格间隔,那么自动补齐仅仅是向自定义源中添加项目。

想要查看上面图片背后的代码,请参阅与产品一同安装的SpreadWinDemo示例。

使用子编辑器

对于几种可编辑的单元格类型,当你点击单元格的内部时,就会显示一个编辑器。你可以扩展这个简单的行编辑器,并且提供一个自定义用户界面 (为用户提供若干的设置来辅助用户进行便捷输入) 这个接口的其他层级是受子控制器或单元格编辑器的editor控制的。例如,当你选择日期时间单元格时,你可以向用户可以提供一个日历以便选择一个日期。这个日历控件将被称为子编辑器。

创建一个子编辑器

你可以创建你自己的子编辑器,当此操作完成时,此编辑器就会显示。

  • 通过点击F4键
  • 通过在编辑模式中双击单元格
  • 通过点击下拉按钮(当DropDownButton属性被设为“True”时)

创建你自己的子编辑器的步骤是:

1) 为一个子编辑器创建一个新的Form类。

2) 对这个你刚创建的Form实现ISubEditor接口。

3) 对调用函数设置子编辑器(SubEditor属性)

关于子编辑器的示例,请参阅上面“自定义弹出的日期时间控件”,这里日历子编辑器在日期时间单元格中可用。

禁用子编辑器

在可编辑单元格类型中,当你点击单元格内部时,就会默认地显示一个子编辑器。但是有的时候你可能想禁用这些子编辑器。例如,在日期时间单元格中,你可能想要禁止弹出的日历控件; 在数字单元格中你可能想要禁止弹出的计算器控件。

要禁用子编辑器,你可以在SubEditorOpening事件中设置e.Cancel为“True”:

private void FpSpread1_SubEditorOpening(object sender, FarPoint.Win.Spread.SubEditorOpeningEventArgs e) { e.Cancel = true; } 创建自定义的单元格类型

你可以通过创建一个继承自已存在的单元格类型的子类(就是说要重载这个类中的每一个方法)来创建你自己的单元格类型。如果自定义单元格类型要使用剪贴板或者要使用导出到Excel的方法,那么自定义单元格类应当被标记为“Serializable”。

Spread演示事例中的自定义编辑器示例(Spread for Windows Forms 5\samples folder)显示了如何使用控件使之成为单元格editor。示例文件夹中的那个“FarOut!”示例显示了自定义单元格类型。



本文转自 powertoolsteam 51CTO博客,原文链接:http://blog.51cto.com/powertoolsteam/641165,如需转载请自行联系原作者


相关文章
|
3月前
|
安全 C# 开发者
Windows Forms 应用开发:一分钟浅谈
本文将带领您从零开始,逐步掌握使用 C# 进行 Windows Forms 开发的技巧,包括创建首个应用、处理常见问题及优化方法。首先介绍如何搭建环境并编写基础代码,接着深入探讨控件使用与布局管理,解决控件重叠和响应式布局难题。最后讲解事件处理与多线程技术,确保长时间任务不阻塞界面,并安全更新 UI 状态,助您开发流畅的应用程序。
154 64
|
2月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
109 9
|
3月前
|
Windows
[原创]用MASM32编程获取windows类型
[原创]用MASM32编程获取windows类型
|
4月前
|
数据库 Windows
超详细步骤解析:从零开始,手把手教你使用 Visual Studio 打造你的第一个 Windows Forms 应用程序,菜鸟也能轻松上手的编程入门指南来了!
【8月更文挑战第31天】创建你的第一个Windows Forms (WinForms) 应用程序是一个激动人心的过程,尤其适合编程新手。本指南将带你逐步完成一个简单WinForms 应用的开发。首先,在Visual Studio 中创建一个“Windows Forms App (.NET)”项目,命名为“我的第一个WinForms 应用”。接着,在空白窗体中添加一个按钮和一个标签控件,并设置按钮文本为“点击我”。然后,为按钮添加点击事件处理程序`button1_Click`,实现点击按钮后更新标签文本为“你好,你刚刚点击了按钮!”。
330 0
|
5月前
|
C# 开发者 Windows
WPF在.NET9中的重大更新:Windows 11 主题
这也是一个很好的学习WPF的项目,可以通过看源代码提升自己的WPF水平。 WPF Gallery演示如何在标记中指定 XAML 控件,因为每个控件页都显示用于创建每个示例的标记。它还将显示您的应用程序的所有可能的布局选项。 WPF Gallery应用还包含有关使用颜色、排版和图标开发特殊应用程序的设计指南。它还包括一个示例页,用于演示如何使用不同的控件在 WPF 应用程序中创建用户界面。 WPF在.NET 9中可以使用Win11主题的控件了,有助于WPF开发者们开发出更符合现在设计风格、更美观的界面。 希望WPF越来越好。
69 0
|
7月前
|
运维 安全 Linux
使用阿里云搭建幻兽帕鲁服务器操作系统类型Windows和Linux有区别吗?
使用阿里云搭建幻兽帕鲁服务器操作系统类型Windows和Linux有区别吗?性能有差异?同配置的游戏服务器,如4核16G或8核32G配置等,选择Windows和Linux操作系统差异不太大,如果非要对比的话,Linux系统相对Windows更少占用计算资源,当然如果对Linux不熟悉的话,可以选择Windows。另外,即便是幻兽帕鲁服务器创建成功后,也是可以免费修改操作系统的
208 1
|
监控 C# Windows
内网桌面监控软件中的远程控制功能实现(基于C#和Windows Forms)
近年来,随着远程办公的兴起,对内网桌面监控软件的需求逐渐增加。本文将探讨如何通过C#和Windows Forms实现内网桌面监控软件中的远程控制功能,并在结尾部分介绍监控到的数据如何自动提交到网站。
395 0
|
1月前
|
网络安全 Windows
Windows server 2012R2系统安装远程桌面服务后无法多用户同时登录是什么原因?
【11月更文挑战第15天】本文介绍了在Windows Server 2012 R2中遇到的多用户无法同时登录远程桌面的问题及其解决方法,包括许可模式限制、组策略配置问题、远程桌面服务配置错误以及网络和防火墙问题四个方面的原因分析及对应的解决方案。
|
1月前
|
监控 安全 网络安全
使用EventLog Analyzer日志分析工具监测 Windows Server 安全威胁
Windows服务器面临多重威胁,包括勒索软件、DoS攻击、内部威胁、恶意软件感染、网络钓鱼、暴力破解、漏洞利用、Web应用攻击及配置错误等。这些威胁严重威胁服务器安全与业务连续性。EventLog Analyzer通过日志管理和威胁分析,有效检测并应对上述威胁,提升服务器安全性,确保服务稳定运行。