C#写所见即所得的设计器

前言

随着计算机信息系统不断深入发展,其系统结构要求越来越灵活,这种灵活性就是表现为程序的高度可配置性,可能应用程序的工作流程可以随便改变,用户界面也可以随便改变,面对这种不断增强的灵活,是不可能通过修改程序代码来实现的,应用系统本身需要发生深刻变化,需要实现很强的扩展性和灵活性。此外z专门用于修改系统配置的外围工具也是非常重要的。这些系统外围定制工具很大一部分就是一些所见即所得的设计器。比如工作流编制工具,WinForm或WebForm界面设计器,而报表设计器也是典型的外围定制工具。

总所周知,所见即所得的设计器是个相当复杂的程序,首先它需要复杂的图形化用户界面编程,包括图形的绘制,鼠标键盘事件的处理,还要抗屏幕闪烁。其次还有它后台的数据维护处理,包括用户界面和数据的同步,数据的组织安排,以及加载和保存文档的处理。而且这些处理过程可以算是纠缠在一起,需要非常认真小心的分析设计,仔细编码。

本文就是探讨如何实现一个所见即所得的设计器。 关于本文,可以参考作者的另一篇文章-如何使用C#编写文本编辑器。

设计器类型

设计器按照用户界面和使用体验,可以分为两种模式,一种是基于直角坐标方式,另一种是基于流式排版方式。微软的Visio就是典型的直角坐标方式,而Word则是流式排版方式,而VS.NET的WebForm窗体设计器就是这两者的结合。

在直角坐标方式的设计器中,设计元素是使用XY坐标来在设计视图中定位的,对于矩形元素一般指定它的左上角的位置来定位,设计者需要指定设计元素的位置,有时还要设置它的大小。对于线段需要指定两个端点的XY坐标。设计者只要设置好了各个元素的位置大小就完成了设计文档的基本结构,剩下的就是设置各个元素各自的内容了。

在流式排版设计器中,设计元素是不需要指定位置的,是根据一般根据从左到右,从上到下的排列原则填充到设计视图中(但有时会变成其他排列原则)。设计元素的位置是动态计算的。流式设计器可能还要使用键盘直接输入文本,需要显示光标。流式排版设计器可以看作文字处理器。

这两种设计器用户界面和使用体验不一样,因此其程序处理的方式也不一样,直角坐标设计器存在设计元素间相互覆盖,这影响绘图,此外还需要大量的鼠标拖拽操作,需要认真处理鼠标事件,但键盘事件处理得不多。而流式排版设计器中元素不会相互覆盖,因此绘制起来方便点,鼠标事件处理不多,但键盘事件处理的多,此外还需要处理光标。但这两种设计器它的文档对象模型有比较大的类似性。

在本文中,以下只讨论直角坐标方式的设计器。

设计器的功能

个人认为一个设计器应当实现的功能有:

设计文档的加载和保存,设计器可以将当前设计的内容保存到一个文档中,这个文档可以保存到文件中,也可保存到数据库或某个服务器中。设计器可以加载文档来完全重现上次的设计结果。

设计器可以快速准确的绘制文档视图,当视图大小超过设计区域时,用户界面应当出现滚动条来进行滚动操作。

当前有互换式设计体验,用户可以使用鼠标拖拽操作来改变元素的位置大小等布局设置,用户改变了元素的布局或某些属性时,必须立即更新文档视图,而且更新区域应当尽量小。

支持所见即所得的设计体验,当设计器需要进行图形输出,例如输出图片或打印时,用户在设计器中的设计视图应当和输出的图形保持一致。

尽量减少屏幕闪烁。这需要绘制图形或更新视图时需要进行优化,尽快完成绘制操作。

若设计器需要进行扩展时,设计器应当提供足够的扩展能力,开发人员可以在这个设计器的基础上添加新的特性,使得设计器能显示新样式的文档视图。并且加载和保存文档时也能处理新的文档结构。

若需要可以支持VBA脚本,用户可以编写VBA脚本来控制设计器,包括其设计的文档内容。

时间: 2024-09-17 03:30:57

C#写所见即所得的设计器的相关文章

如何用C#写所见即所得的设计器

设计 摘要     本文讨论了如何使用C#编写一个所见即所得的设计器,分析了设计器的基本原理,可能遇到的技术问题,以及如何调用.NET框架来实现一个设计器. 版权声明   本文是XDesigner软件工作室撰写,XDesigner软件工作室拥有本文版权,转载请注明出处,并保留本版权声明. 前言 随着计算机信息系统不断深入发展,其系统结构要求越来越灵活,这种灵活性就是表现为程序的高度可配置性,可能应用程序的工作流程可以随便改变,用户界面也可以随便改变,面对这种不断增强的灵活,是不可能通过修改程序代

用.NET实现所见即所得的设计器

设计 摘要 本文讨论了如何使用C#编写一个所见即所得的设计器,分析了设计器的基本原理,可能遇到的技术问题,以及如何调用.NET框架来实现一个设计器. 版权声明 本文是XDesigner软件工作室撰写,XDesigner软件工作室拥有本文版权,转载请注明出处,并保留本版权声明. 前言 随着计算机信息系统不断深入发展,其系统结构要求越来越灵活,这种灵活性就是表现为程序的高度可配置性,可能应用程序的工作流程可以随便改变,用户界面也可以随便改变,面对这种不断增强的灵活,是不可能通过修改程序代码来实现的,

VB5报表设计器在人事管理软件中的应用

使用过VB5的人都会发出这样的赞誉-VB5真牛!的确,Visual Basic 5.0 以其强大的功能和优异的开发环境深深吸引了众多编程迷.彻底中文化的VB5中文版更深得专业人员及编程爱好者的喜爱.笔者在为某单位设计人事履历管理系统时就选用了VB5中文版.可是在设计报表时遇到了难题, 用printer对象的enddoc方法来实现打印的话,输出数十张格式各异的报表显然是太繁琐了.可能Miscrosoft公司也意识到了这一点,最终我发现它在 VB5企业版的外接程序中为我们提供了一个外接报表设计工具.

用.NET Framework 2.0创建Form设计器

创建|设计 Microsoft .NET Framework 1.0提供了一个非常通用的设计时框架,但是没有提供任何实现代码来完成一个设计器,Visual Studio? .NET实现了所有的复杂逻辑,要第三方去重新实现这个复杂的逻辑..NET Framework 2.0引入了一组类能够用于设计器的实现. 理解.NET Framework如何工作,非常重要的是要了解设计器是如何使用的.设计器是负责管理设计界面上的组件的设计时期行为和表现的对象.框架关联设计时对象和运行时对象,为设计时组件提供了一

jBPM-Side流程设计器架构说明

一.代码主要结构 所谓流程设计器者,无怪乎读取xml文件,图形展现,操作图形元素,改变xml文件,回写,如此而已. 既然如此,设计器的流程结构就非常清晰:首先是xml框架解析xml文件为Model模型组件,然后Model模型组件被展现为Component视图组件:用户对Component视图组件进行操作,这些操作被同步的修改到Model模型组件:最后用户保存时,Model模型组件经过xml框架解析回 xml文件,该文件被上传到服务器或本地覆盖原有的xml文件. 那么代码结构就很清晰了:xml框架

Visual Studio DSL 入门 11---为状态机设计器添加规则

上一节我们在设计器的显示方面进行了完善,在这一节,我们将深入状态机设计器的一些逻辑细节,给我 们的设计器添加逻辑规则.为生成代码做好准备. 在开始之前,我们先看一下Transition的几个属性之间的关系: 1.编辑Event,Condition,Action属性时,Label属性能够自动计算显示,计算逻辑为Event [Condition] / Action 2.当修改属性Label时,Event,Condition,Action的值也能够对应自动更新. 我们使用Vs.net Dsl的规则来实

整合Acitiviti在线流程设计器(Activiti-Modeler 5.19)

1.概述前言 一直以来都是从事大量的工作流相关的项目,用过很多商用的工作流产品,包括国内与国外的,尽管商用的工作产品在UI操作上比较人性化,但个人用户觉得,这东西只需要一些初级用户,对于我们一直在为一些高级的客户提供一些专业的数据整合.流程梳理.系统间的数据穿透时,这些系统因为不开源,给项目的实施带来巨大的风险,在一些项目栽过跟头后,我更偏向于使用开源的平台了.但开源平台最大的难点是在于你是否有足够的技术人员来学习及掌握它,否则,它也一样面临项目实施失败的风险.后来在一些项目上使用JBPM4,A

整合Acitiviti在线流程设计器(Activiti-Modeler 5.18.0)

整合Acitiviti在线流程设计器(Activiti-Modeler 5.18.0) 1.概述前言 一直以来都是从事大量的工作流相关的项目,用过很多商用的工作流产品,包括国内与国外的,尽管商用的工作产品在UI操作上比较人性化,但个人用户觉得,这东西只需要一些初级用户,对于我们一直在为一些高级的客户提供一些专业的数据整合.流程梳理.系统间的数据穿透时,这些系统因为不开源,给项目的实施带来巨大的风险,在一些项目栽过跟头后,我更偏向于使用开源的平台了.但开源平台最大的难点是在于你是否有足够的技术人员

(分享)基于JQuery的WEB套打设计器jatoolsPrinter2.0

问题描述 开发web套打应用时,如快递单打印,一般要经过以下步骤:1.扫描快递单据,保存成一个图片文件2.将底图作成<img>3.在<img>上放置打印项,试着打印到打印机,观察有无偏移4.有偏移,则调整,再试打.5.无偏移,则将样张,改造成相应语言的动态页面,如jsp,asp,php等.上述过程中,如果没有可视化的设计工具,3,4两步是最麻烦的,往往要经过多次调整,特别是单据比较多的应用,工作量挺大.所以,jatoolsPrinter打印控件的套打开发设计器,就是帮助你简化套打对