故事作者:rission

最近创作

看看TA的故事

【征文】海不辞水 故能成其大

已锁定

rission

  • 帖子

    221
  • 精华

    2
  • 被关注

    14

论坛等级:侠圣

注册时间:2011-10-23

普通 普通 如何晋级?

【征文】海不辞水 故能成其大

1916

4

2019-08-12 10:30:31


2012年,初次接触西门子,初次使用WinCC。

 

项目有这样一个需求

一方面,需要像Excel那样显示表格,一些列是固定文字,一些列是可选的内容(备选项目从数据库中读出),一些是可以手动输入的列。

另一方面,许多个页面均需要这样的表格,每个页面中的表格定义的列并不相同。

 

想过两个方法都有弊端:一是使用Excel嵌入页面,窗口不好控制,载入速度慢导致切换页面卡顿;二是使用工具箱自带表格控件显示,另画区域用于输出,需要各个页面单独设计,需要根据鼠标位置决定输出的类型,实现复杂,且不可靠。

 

那就使用独立控件来实现吧——网上现成的一般功能超出所需,并且需要付费还可能有兼容性问题——那就自己试着做一个吧!

 

思路很简单:

使用VB6.0工具箱提供的MSHFlexGrid,TextBox和ComboBox控件为基本组件,直接利用MSHFlexGrid的样式,将TextBox或ComboBox置于MSHFlexGrid之上,且初始是都处于隐藏状态,当鼠标点击相应单元格的时候,把TextBox或ComboBox移至当前单元格处,并使之处于输入激活状态,等待用户选择或者填入数据,而具体是显示TextBox还是ComboBox,需要从自制控件的属性中定义。

 

当年是完成了这样的一个作品,并且得到了很好的效果。

 

几年之后,又要做一个工具软件,也有类似的需求,翻出来,可以用!

虽然,那是2018年,又拿起了1998年的VB6.0;虽然,Win7就快停止更新了,又虚拟机装了Xp。

但是,便捷,好用,那就是目的!

所以,

一、技术只是工具,思维才是灵魂

二、海不辞水 故能成其大

 

下面是一种自定义表格控件的实现方法(第一次直接在网页编辑了90%,网页卡死恢复后没了,本次是重写! 此处需要赞

 


思路:

上面已经提到,实际上就是实现下面两个事件



步骤:

在VB6.0中编写控件,之后注册再WinCC中使用

(1)确定控件将要提供的功能。

(2)设计控件的外观。

(3)设计控件的接口,即属性、事件和方法。

(4)实现控件的接口和功能。

(5)编译并生成控件文件(.ocx 文件)。

(6)将生成的控件注册到系统中去。

其中,代码主要包含三部分:1、编辑属性2、编辑方法3、控件初始化,具体代码就不在这贴出来了。

 

优点:

实际上,实现这样一个拼凑的控件并不够,如果能够有利于提高使用效率才更值得考虑。

构建控件时设计了几套“模板”,比如:隔行双色表格、固定行/列与普通单元格区分样式、快速标题字号大于单元格字号等等..,这样能像使用模板一样,在初始化时一行代码即可确定样式,并能保持各个实例的风格统一。

 

实例:

实际使用是这样的:

Private Sub CommandButton_Click()

    '准备好下拉列表选项的数据源,共有三种方式,其中ADO数据集方式没有列出

 ‘方式一:一维数组式   

    Dim a(2) As String

    a(0) = "A"

    a(1) = "B"

    a(2) = "C"

‘方式二:分隔符“;”字符串方式

    Dim listStr As String

    listStr = "X;Y"

   

  '简易表格样式模板A:ClassicModeA(FormatString, BodyFontSize, Rows, Flag)

  '参数为格式化字符串、表中正文文本字号、行数(包括固定行)、表头的文字字号与正文字号的差值。

 

    UserControl11.ClassicModeA "列标题1|列标题2|列标题3|列标题4|列标题5", 12, 10, 2

   

    '使用下拉列表式的列

    UserControl11.EditEnable = BoxAndList

    UserControl11.SelectListMode = True

    UserControl11.SLString = "列标题2;列标题4"

   

  '数组参数作为下拉列表选项BuildSLItems (SLItems, Style, Header, Flag )

‘SLItems:可以是字符串、数组或者数据集对象。Style: 指定下拉列表的样式。Header:指定字段名。Flag:标记SLItems是什么类型的值,0为字符串,1为数组,2为数据集对象

 

    UserControl11.BuildSLItems a, 2, "列标题2", 1

   

    '字符串参数作为下拉列表选项

    UserControl11.BuildSLItems "X;Y", 2, "列标题4", 0

End Sub

 

按钮按下后的效果(下图将三种编辑状态通过截图合成到一张图片中,实际使用时是分别激活其中一个单元格进行编辑):



 

 

 

【征文】海不辞水 故能成其大 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3232条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。