开发版及以上授权用户无需看此部分内容。
为了让一些没有C1授权的用户也可以正常使用窗体设计功能,这里提供了一些常用控件的替代控件。控件界面观感差一点,但是使用方式与最终运行效果跟原控件是一样的。
名称 | 森之格基础控件 | 转换替代控件 | 带标题转换绑定控件 |
复选框 | SmCheckBox | CtCheckBox | CtBoxCheckBox |
复选组合框 | SmCheckedComboBox | CtCheckedComboBox | CtBoxCheckedComboBox |
复选列表框 | SmCheckedListBox | 可用SmCheckedListBox | 可用BoxCheckedListBox |
颜色选择框 | SmColorPicker | CtColorPicker | CtBoxColorPicker |
组合框 | SmComboBox | CtComboBox | CtBoxComboBox |
日期选择框 | SmDateTimePicker | CtDateTimePicker | CtBoxDateTimePicker |
自动筛选框 | DropDownAutoFilterBox | CtBoxDropDownAutoFilter | |
下拉组合框 | SmDropDownBox | CtDropDownBox | CtBoxDropDownBox |
下拉目录树框 | DropDownTreeFilterBox | CtDropDownTreeFilterBox | CtBoxDropDownTreeFilter |
颜色选择框 | SmFontPicker | CtFontPicker | CtBoxFontPicker |
列表框 | SmListBox | 可用SmListBox | 可用BoxListBox |
数值组合框 | SmNumericComboBox | CtNumericComboBox | CtBoxNumericComboBox |
图片 | SmPictureBox | 可用SmPictureBox | 可用BoxPictureBox |
文本框 | SmTextBox | CtTextBox | CtBoxTextBox |
时间选择框 | SmTimePicker | CtTimePicker | CtBoxTimePicker |
文件管理 | SmFilesManager | CtFilesManager | |
图片管理 | SmImagesManager | CtImagesManager | |
分组框 | BoxGrouper | ||
树表 | SmEditTreeGrid | ||
树表组合面板 | SmEditTreeTable | CtEditTreeTable | 蓝色字体表示可绑定控件。我们可以直接进行字段绑定 |
路径选择框 | SmFilePathSelectBox | CtFilePathSelectBox | |
命令按钮 | SmButton | CtButton | 黄色背景色表示此控件是甚至C1控件扩展而来,使用时需要C1授权,开发版以下用户,比如试用版、单机授权版用户不能够正常使用。但是可以使用它们的替代控件,以Ct开头的控件代替使用。只是窗体设计时可见效果差一点,实际运行效果以开发方式是一样的。 |
窗体 | SmForm | ||
菜单按钮 | SmFormMenuButton | ||
表 | SmGrid | CtGrid | |
标签 | SmLabel | ||
线条 | SmLine | ||
列表视图 | SmListView | ||
面板 | SmPanel | ||
单选框 | SmRadioButton | ||
单选列表框 | SmRadioListBox | ||
单记录表 | SmRecordGrid | CtRecordGrid | |
分区面板 | SmSplitContainerClass | ||
分区折叠面板 | SmSplitContainerEx | ||
系统选项 | SmSystemOption | ||
页面集合 | SmTabControl | ||
目录树 | SmTreeView | ||
目录树查找框 | SmTreeViewFind | CtTreeViewFind | |
目录树菜单 | SmTreeViewMenu | CtTreeViewMenu | |
表字段索引框 | GridDataSearch | CtGridDataSearch | |
标准树表面板 | GridEditTreeStandard | CtGridEditTreeStandard | |
绑定控件集 | GridFieldControls | CtGridFieldControls | |
表筛选框 | GridFilter | CtGridFilter | |
空菜单 | GridMenuBase | CtGridMenuBase | |
表菜单 | GridNavigator | CtGridNavigator | |
主子表结点面板 | GridNode | CtGridNode | |
字段预览面板 | GridNotes | CtGridNotes | |
表记录导航菜单 | GridRecordNavigator | CtGridRecordNavigator | |
标准编辑表面板 | GridStandard | CtGridStandard | |
树表筛选框 | GridTreeFilter | CtGridTreeFilter | |
子表集合 | SubGrids | CtSubGrids | |
数据透视表 | PivotPage | CtPivotPage | |
透视表控制面板 | PivotPanel | CtPivotPanel |
这套控件有以下几个特点:
1、在窗体设计中的界面难看,只有一个框。
实际运行效果
2、作为商用控件的免费代替品,主要靠代码控制。
3、代码控制方式跟它替代的原对象一致。我们甚至要对代码编辑器中引用控件的类型也要替换成原对象类型。我们需要对自己做一个自我催眠,Ct开头转换类控件,与正常的原控件唯一不同的地方就是设计窗体中的显示效果。
最后执行效果如下:
4、虽然我们上面强调了Ct开头转换类控件,与正常的原控件唯一不同的地方就是设计窗体中的显示效果。可是真的是这样吗?当前这套转换类控件的实现原理是,我们做一套普通控件,然后让它的属性和事件跟要替代的商业控件的属性、事件一致。然后方便我们在设计窗体中进行控件的布局。写代码的时候我们引用的对象类型还是原控件类型,这是因为我们在运行窗体时,创建控件的时候就直接用原控件类型创建,然后取窗体设计中设置的一些属性设置和事件代码绑定。这个过程一切看起来都很完美,丑的只是设计界面,属性变动无法直观地看到修改效果。但是,实际的操作过程中,我们原控件可能功能修改,添加或删除了一些属性、方法、事件,而这个转换类控件并没有同步地跟着修改。这就必然会给我们的窗体设计带来一点点意外的效果。而且不是所有的属性、事件都可以方便地在Ct开头的转换类控件上实现。
所以,如果一些功能在正常原控件中可以实现,但是为什么在这里的替换控件不能实现?原因一:可能是还没有同步。原因二:相应的功能可能并不太适合转换。那有什么办法解决吗?有!那就是通过代码控制。代码操作的都是原控件类型,就没有这种限制。想省钱,那就只能忍受这样那样的限制。最终结果是OK的就行了。
5、我们在了解了此类控件的大概背景后,也只需要正常的学习其他控件即可。