表单设计器—属性设置及相关操作
当HTML元素添加到设计面板以后,通常我们还需要对元素的属性进行设置,特别是为该HTML元素添加一些业务相关的属性,我们暂且不讨论业务属性的添加,但是其具体的操作与设置普通属性是相似的。一般来说设置元素属性的方式可以有PropertyGrid、PropertyForm以及代码修改,PropertyGrid是三者之中最常用的方式,像VisualStudio、Dreamweaver、FlexBuilder等进行界面设计时都使用这种方式;代码修改一般来说是一种辅助性的方式,因为不具有可视化界面的友好性和易用性,所以使用该方式进行属性设置的产品不能够作为一种成熟的产品;本文主要对PropertyForm这种方式进行介绍。
PropertyForm展现一般来说是通过右键事件触发的,在大多数的文档处理工具中一般使用的是这种方式,例如Office,wps等。使用右键菜单对设计面板中的HTML元素进行属性设置的时候,主要的问题有以下几个:
-
如何确定右键点击处焦点所处控件的类型,进而根据控件类型显示不同的右键菜单,如选中button、checkbox与选中table时显示的右键菜单是不同的。
-
如果选中的是button、checkbox等普通的HTML元素,如何将属性窗口设置的值体现到HTML代码中或者在设计面板中显示相应效果。
-
在Table区域内点击右键后,table相关属性的设置
同时,为了保持连贯性,本文也将介绍table右键的相关操作实现。
以上问题的解决方法为:
-
通过DHTMLEdit.DOM.selection.type属性进行区分当前右键事件选择元素的类型,之前文章:HTML元素操作已经介绍过该type可选值。此处有个问题就是,如果焦点在Table表格中或者不在任何HTML元素上,那么type的值都是NONE,此时如何确定是显示表格相关右键菜单还是显示面板右键菜单呢,答案是通过DHTMLEdit.QueryStatus方法来确定,具体方式见下文。
-
针对不同的HTML元素,我们需要使用不同的属性窗口对元素属性进行设置,我们可以用过IHTMLElement的setAttribute方法来为元素增加或者修改属性值,设置完成后我们获取该元素的outHTML,然后将该html内容替换原来的html内容即可。例如我们可以对Button的value进行设置:HTMLInputButtonElement.setAttribute("width", "75px",0);对于样式属性,我们可以生成相应的对象进行设置。
-
对于Table的操作主要通过下面的方法进行:
DHTMLEdit.QueryStatus进行某种操作之前用来检查该操作的合法性
DHTMLEdit.ExecCommand进行操作
例如插入表格操作:
DHTMLEDITCMDF cmd= DHTMLEdit.QueryStatus(DHTMLEDITCMDID.DECMD_INSERTROW);
if (cmd >= DHTMLEDITCMDF.DECMDF_ENABLED)
{
DHTMLEdit.ExecCommand(DHTMLEDITCMDID.DECMD_INSERTROW);
}
QueryStatus的返回值有:
DECMDF_DISABLED (1):当前选中区域内不能执行此操作
DECMDF_ENABLED (3):当前选中区域内可以执行此操作
DECMDF_LATCHED (7):当前区域内可执行该操作,操作按钮应置为选中,例如加粗
DECMDF_NINCHED (11):当前选中区域可以执行此操作,但是含有一些特殊元素,例如对含有粗体和正常字体的区域执行加粗操作时会返回DECMDF_NINCHED
Table相关的ExecCommand支持的操作有:
DECMD_DELETECELLS:从table中删除选中的单元格
DECMD_DELETECOLS:从table中删除包含选中文本的所有列
DECMD_DELETEROWS:删除包含选中元素的所有行
DECMD_INSERTCELL:在当前table选中单元格的左边插入单元格
DECMD_INSERTCOL:在当前列的左边插入新列
DECMD_INSERTROW:在当前行的上方插入新行
DECMD_INSERTTABLE:插入表格
DECMD_MERGECELLS:合并单元格
DECMD_SPLITCELL:拆分单元格
原创文章,转载请注明出处!
All CopyRight Reserved !
QQ:307073463
Email:jingtaodeemail@qq.com
MSN:sunjingtao@live.com
本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名孙镜涛(包含链接),具体操作方式可参考此处。如您有任何疑问或者授权方面的协商,请给我留言。