精华内容
下载资源
问答
  • 控件listview控件可有4种不同的视图显示方法,跟“资源管理器”里的“查看”方式相似:(1)无图标;(2)小图标;(3)列表;(4)报表式。使用哪种视图,可由该控件的view属性设置控制。其中“报表”视图用来显示记录数据...

    控件

    listview控件可有4种不同的视图显示方法,跟“资源管理器”里的“查看”方式相似:(1)无图标;(2)小图标;(3)列表;(4)报表式。

    使用哪种视图,可由该控件的view属性设置控制。

    其中“报表”视图用来显示记录数据很适合。

    listview控件包括listItem对象和ColumnHeader对象。

    本人简单理解为:listItem对象看成数据行;ColumnHeader对象看成列标题。

    listItem对象(行)有两部分:一部分是图标和简要描述的文本(第1列);另一部分是前者的子项文本信息(第2列,第3列......)。

    而listItems即是对listItem对象集合(所有行)的引用。

    故此,listItems(1)                         可以表示为第1行;

    listitems(1).text               返回第1行第1列的文本值;

    listitems(1).subItem(1)   返回第1行第2列的文本值。

    【   控件常用属性   】

    [1]view属性

    该属性有4个值可设定:

    1---小图标视图显示

    2---列表

    3---报表

    0---无图标(默认)

    [2]AllowColumnReorder属性

    值设置.t.时,用户可以用鼠标选中1列拖至其他地方进行重新排列。

    [3]Checkboxes属性

    设置为.t.时,每一行数据前将显示一复选框。

    [4]FlatScrollBar属性

    设置为.f.时控件将显示滚动条。

    [5]FullRowSelect属性

    设置为.t.时可以整行地选择数据。

    [6]GridLines属性

    设置为.t.时控件将显示网格线。(只作用于“报表”视图)

    [7]HideColumnHeaders属性

    设置为.f.时,列标题可视,反之则不可视。

    [8]HotTracking属性

    设置为.t.时,鼠标所在行将以高亮度显示。

    [9]Icons,SmallIcons属性

    两者设置listview控件视图相关联的ImageList控件中的图片。

    Icons指明视图为大图标时的关联;

    SmallIcons指明视图为小图标时的关联。

    [10]LabelWrap属性

    设置为.t.时,文本标签超出列宽时可换行。

    [11]SelectedItem属性

    返回对所选ListItem对象(行)的引用。

    [12]Sorted属性

    当值为.t.时,列表按字母排序。

    [13]Picture属性

    指定控件的背景图片,此属性在控件自带属性设置框里设置。

    *****************************************************************

    【   控件常用方法程序   】

    [1]Add方法

    添加listItem对象(行)到控件中。

    语法格式:

    控件ListItems集合.add(index,key,text,icon,smallIcon)

    [2]FindItem方法

    查找并返回对控件中listItem对象的引用。

    语法格式:

    控件名.FindItem(string,value,index,match)

    ******************************************************************

    新建一表单,在表单里拖出一个ListView控件和一个ImageList控件。

    选中ListView控件,单击右键,选择“ListViewCtrl   Properties”,在General页面框中选中下列复选框:

    LabelWrap:文本可换行

    Checkboxes:显示复选框

    FullRowSelect:整行选定

    清除FlatScrollBar的选定,控件将显示滚动条。

    **************************************************************

    控件             name属性

    ListView                 view1

    ImageList               Image1

    ***************************************************************

    在表单的Init事件中加入下列代码:

    &&&&将ImageList控件图片赋予Listview控件&&&&

    thisform.view1.Icons=thisform.Image1.object

    thisform.view1.smallIcons=thisform.Image1.object

    ****************************************************************

    在listview控件init事件中加入下列代码:

    &&&初始化ListView控件&&&&

    &&设置显示为报表视图

    this.view=3

    &&添加和设置列标

    store   this.ColumnHeaders.Add(,"l11","序号",this.Width/7)   to   clm1

    store   this.ColumnHeaders.Add(,"l12","物资编号",this.width/4)   to   clm2

    store   this.ColumnHeaders.Add(,"l13","存货名称",this.Width/4)   to   clm3

    store   this.ColumnHeaders.Add(,"l14","规格",this.width/4)   to   clm4

    store   this.ColumnHeaders.Add(,"l15","计量单位",this.Width/8)   to   clm5

    store   this.ColumnHeaders.Add(,"l16","请购数量",this.width/4)   to   clm6

    store   this.ColumnHeaders.Add(,"l17","使用日期",this.Width/4)   to   clm7

    store   this.ColumnHeaders.Add(,"l18","请购用途",this.width/4)   to   clm8

    this.hottracking=.t.       &&鼠标停留行高亮度显示

    ******************************************************************

    将数据表添加到listview控件中显示:

    新建一表单方法程序   refresh_grid,可随时调用刷新数据。

    在其中加入下列代码:

    L1=thisform.view1

    L1.listItems.clear   &&清除数据

    sele   请购表

    scan

    &&添加listItem对象第1列图标和文本。

    store   L1.listItems.Add(,,序号,,1)   to   bbb

    &&添加第2,3...列文本

    store   alltrim(物资编号)   to   bbb.subitems(1)

    store   alltrim(存货名称)   to   bbb.subitems(2)

    store   alltrim(规格)   to   bbb.subitems(3)

    store   alltrim(计量单位)   to   bbb.subitems(4)

    store   请购数量   to   bbb.subitems(5)

    store   使用日期   to   bbb.subitems(6)

    store   alltrim(请购用途)   to   bbb.subitems(7)

    endscan

    注:若字段值为.null.时,添加时将出现错误提示。

    请自行设置用函数加以判别。为.null.时可以空值添加。

    ************************************************

    如何返回选定值:

    L1=thisform.view1

    L1.selectedItem.text   &&返回选定行第1列文本值

    L1.selectedItem.index   &&返回选定行的位置

    L1.listItems(x).subItems(y)   &&返回第x行,第y+1列文本值

    *****

    如何用用命令设置复选框状态:

    thisform.view1.listItems(x).checked=.t.

    &&第x行复选框选定

    ******************************************

    选定复选框时发生的事件itemcheck:

    LPARAMETERS   item

    if   item.checked=.t.&&判定当复选框选中

    要执行的语句

    else

    要执行的语句

    endif

    ******

    &&清除所有数据

    thisform.view1.listItems.clear

    &&清除选定行

    L1=thisform.view1

    L1.listitems.remove(L1.selectedItem.index)

    ****

    得知所有行的总数:

    L1.listitems.count

    b5c6e30760810067aca120834044fb96.png

    你的赞赏是我坚持原创的动力

    赞赏

    共 0 人赞赏

    展开全文
  • VB中 MSComm控件使用详解 ...MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且VC、VB、Delphi等语言均可使用。  Microsoft Communications  Control(以下简称MSComm)

    VB中 MSComm控件使用详解

     

          MSComm
          控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。
          Microsoft Communications
          Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。

          1.MSComm控件两种处理通讯的方式
              MSComm控件提供下列两种处理通讯的方式:事件驱动方式和查询方式。

          1.1 事件驱动方式
              事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者
          Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用
          MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅
          CommEvent
          属性。在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。每个MSComm
          控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。

          1.2 查询方式
              查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查 CommEvent
          属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。


          2.MSComm 控件的常用属性
          MSComm控件有很多重要的属性,但首先必须熟悉几个属性。
          CommPort 设置并返回通讯端口号。
          Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
          PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口。
          Input     从接收缓冲区返回和删除字符。
          Output    向传输缓冲区写一个字符串。
          下面分别描述:

          CommPort 属性
              设置并返回通讯端口号。
          语法
          object.CommPort[ = value ]
          CommPort 属性语法包括下列部分:
          部分 描述
          object 对象表达式,其值是“应用于”列表中的对象。
          value 一整型值,说明端口号。
          说明
          在设计时,value 可以设置成从 1 到 16 的任何数(缺省值为 1)。但是如果用 PortOpen 属性打开一个并不存在的端口时,MSComm
          控件会产生错误 68(设备无效)。
          警告    必须在打开端口之前设置 CommPort 属性。
          数据类型
          Integer

          Settings 属性
              设置并返回波特率、奇偶校验、数据位、停止位参数。
          语法
          object.Settings[ = value]
          Settings 属性语法包括下列部分:
          部分 描述
          object 对象表达式,其值是“应用于”列表中的对象。
          value 字符串表达式,说明通讯端口的设置值,如下所述。
          说明
          当端口打开时,如果 value 非法,则 MSComm 控件产生错误 380(非法属性值)。
          Value 由四个设置值组成,有如下的格式:
          "BBBB,P,D,S"
          BBBB 为波特率,P 为奇偶校验,D 为数据位数,S 为停止位数。value 的缺省值是:
          "9600,N,8,1"
          下表列出合法的波特率:
          设置值
          110
          300
          600
          1200
          2400
          9600(缺省)
          14400
          19200
          28800
          38400
          56000
          128000
          256000

          下表说明合法的奇偶校验值。
          设置值 描述
          E 偶数 (Even)
          M 标记 (Mark)
          N 缺省 (Default)
          None
          O 奇数 (Odd)
          S 空格 (Space)

          下表列出合法的数据位值。
          设置值
          4
          5
          6
          7
          8 (缺省)

          下表列出合法的停止位值。
          设置值
          1 (缺省)
          1.5
          2

          数据类型
          String
          Settings 示例
          下面的例子设置控件端口通讯,波特率 9600,无奇偶校验检查,8 个数据位,1 个停止位:
          MSComm1.Settings = "9600,N,8,1"

          PortOpen 属性
          设置并返回通讯端口的状态(开或关)。在设计时无效。
          语法
          object.PortOpen[ = value]
          PortOpen 属性语法包括下列部分:

          部分 描述
          object 对象表达式,其值是“应用于”列表中的对象。
          value 布尔表达式,说明通讯端口的状态。
          设置值
          value 设置值是:
          设置值 描述
          True 端口开
          False 端口关

          说明
          设置 PortOpen 属性为 True 打开端口。设置为 False 关闭端口并清除接收和传输缓冲区。当应用程序终止时,MSComm
          控件自动关闭串行端口。
          在打开端口之前,确定 CommPort 属性设置为一个合法的端口号。如果 CommPort
          属性设置为一个非法的端口号,则当打开该端口时,MSComm 控件产生错误 68(设备无效)。
          另外,串行端口设备必须支持 Settings 属性当前的设置值。如果 Settings 属性包含硬件不支持的通讯设置值,那么硬件可能不会正常工作。
          如果在端口打开之前,DTREnable 或 RTSEnable 属性设置为 True,当关闭端口时,该属性设置为 False。否则,DTR 和
          RTS 线保持其先前的状态。
          数据类型
          Boolean
          PortOpen 属性示例
          下例以波特率 9600 打开 1 号通讯端口,没有奇偶检查,8 个数据位,1 个停止位。
          MSComm1.Settings = "9600,n,8,1"
          MSComm1.CommPort = 1
          MSComm1.PortOpen = True

          Input 属性
              返回并删除接收缓冲区中的数据流。该属性在设计时无效,在运行时为只读。
          语法
          object.Input
          Input 属性语法包括下列部分:
          部分 描述
          object 对象表达式,其值是“应用于”列表中的对象。
          说明
          InputLen 属性确定被 Input 属性读取的字符数。设置 InputLen 为 0,则 Input 属性读取缓冲区中全部的内容。
          InputMode 属性确定用 Input 属性读取的数据类型。如果设置 InputMode 为 comInputModeText,Input
          属性通过一个 Variant 返回文本数据。如果设置 InputMode 为 comInputModeBinary,Input 属性通过一个
          Variant .返回一二进制数据的数组。
          数据类型
          Variant
          Input 属性示例
          该例子说明如何从接收缓冲区读取数据。
          Private Sub Command1_Click()
          Dim InString as String
          ' 读取所有可用数据。
          MSComm1.InputLen = 0

          ' 检查数据。
          If MSComm1.InBufferCount Then
              ' Read data.
              InString = MSComm1.Input
          End If
          End Sub

          Output 属性
              往传输缓冲区写数据流。该属性在设计时无效,在运行时为只读。
          语法
          object.Output [ = value ]
          Output 属性语法包括下列部分:
          部分 描述
          object 对象表达式,其值是“应用于”列表中的对象。
          value 要写到传输缓冲区中的一个字符串。

          说明
          Output 属性可以传输文本数据或二进制数据。用 Output 属性传输文本数据,必须定义一个包含一个字符串的
          Variant。发送二进制数据,必须传递一个包含字节数组的 Variant 到 Output 属性。
          正常情况下,如果发送一个 ANSI 字符串到应用程序,可以以文本数据的形式发送。如果发送包含嵌入控制字符、Null
          字符等等的数据,要以二进制形式发送。
          数据类型
          Variant
          Output 属性示例
          下面的例子说明如何将用户键入的每一个字符送到串行端口:
          Private Sub Form_KeyPress (KeyAscii As Integer)
              Dim Buffer as Variant
              ' 设置并打开窗口
              MSComm1.CommPort = 1
              MSComm1.PortOpen = True
              Buffer = Chr$(KeyAscii)
              MSComm1.Output = Buffer
          End Sub

          OnComm 事件
          无论何时当 CommEvent 属性的值变化时,就产生 OnComm 事件,标志发生了一个通讯事件或一个错误。
          语法
          Private Sub object_OnComm ()
                OnComm 事件语法包括下列部分:
                部分 描述
                object 对象表达式,其值是“应用于”列表中的对象。
                说明
                CommEvent 属性包含实际错误或产生 OnComm 事件的数码。注意,设置 Rthreshold 或 Sthreshold 属性为
                0,分别使捕获 comEvReceive 和 comEvSend 事件无效。
                OnComm 事件示例
                下例说明如何处理通讯错误和事件。可以在相关的 Case 语句之后插入代码来处理特定的错误或事件。
                Private Sub MSComm_OnComm ()
                    Select Case MSComm1.CommEvent
                    ' Handle each event or error by placing
                    ' code below each case statement
                ' 错误
                       Case comEventBreak    ' 收到 Break。
                       Case comEventCDTO    ' CD (RLSD) 超时。
                       Case comEventCTSTO    ' CTS Timeout。
                       Case comEventDSRTO    ' DSR Timeout。
                       Case comEventFrame    ' Framing Error
                       Case comEventOverrun    '数据丢失。
                       Case comEventRxOver   '接收缓冲区溢出。
                       Case comEventRxParity    ' Parity 错误。
                       Case comEventTxFull     '传输缓冲区已满。
                       Case comEventDCB     '获取 DCB 时意外错误
                    ' 事件
                       Case comEvCD    ' CD 线状态变化。
                       Case comEvCTS    ' CTS 线状态变化。
                       Case comEvDSR    ' DSR 线状态变化。
                       Case comEvRing    ' Ring Indicator 变化。
                       Case comEvReceive    ' 收到 RThreshold # ofchars.
                       Case comEvSend    ' 传输缓冲区有 Sthreshold 个字符                    
                 '
                       Case comEvEof    ' 输入数据流中发现 EOF 字符
                    End Select
                End Sub
                CommEvent 属性
                返回最近的通讯事件或错误。该属性在设计时无效,在运行时为只读。
                语法
                object.CommEvent
                CommEvent 属性语法包括下列部分:
                部分 描述
                object 对象表达式,其值是“应用于”列表中的对象。

                说明
                只要有通讯错误或事件发生时都会产生 OnComm 事件,CommEvent 属性存有该错误或事件的数值代码。要确定引发 OnComm
                事件的确切的错误或事件,请参阅 CommEvent 属性。
                CommEvent 属性返回下列值之一来表示不同的通讯错误或事件。这些常数可以在该控件的对象库中找到。通讯错误包括下列设置值:
                常数 值 描述
                comEventBreak 1001 接收到一个中断信号。
                comEventCTSTO 1002 Clear To Send 超时。在系统规定时间内传输一个字符时,Clear To Send
                线为低电平。
                comEventDSRTO 1003 Data Set Ready 超时。在系统规定时间内传输一个字符时,Data Set Ready
                线为低电平。
                comEventFrame 1004 帧错误。硬件检测到一帧错误。
                comEventOverrun 1006 端口超速。没有在下一个字符到达之前从硬件读取字符,该字符丢失。
                comEventCDTO 1007 载波检测超时。在系统规定时间内传输一个字符时,Carrier Detect
                线为低电平。Carrier Detect 也称为 Receive Line Signal Detect (RLSD)。
                comEventRxOver 1008 接受缓冲区溢出。接收缓冲区没有空间。
                comEventRxParity 1009 奇偶校验。硬件检测到奇偶校验错误
                comEventTxFull 1010 传输缓冲区已满。传输字符时传输缓冲区已满
                comEventDCB 1011 检索端口的设备控制块 (DCB) 时的意外错误

                通讯事件包括下列设置值:
                常数 值 描述
                comEvSend 1 在传输缓冲区中有比 Sthreshold 数少的字符。
                comEvReceive 2 收到 Rthreshold 个字符。该事件将持续产生直到用 Input 属性从接收缓冲区中删除数据。
                comEvCTS 3 Clear To Send 线的状态发生变化。
                comEvDSR 4 Data Set Ready 线的状态发生变化。该事件只在 DST 从 1 变到 0 时才发生。
                comEvCD 5 Carrier Detect 线的状态发生变化。
                comEvRing 6 检测到振铃信号。一些 UART(通用异步接收— 传输)可能不支持该事件。
                comEvEOF 7 收到文件结束(ASCII 字符为 26)字符。
                数据类型
                Integer


                MSComm 控件示例
                下面这个简单的例子演示了用调制解调器进行基本的串行通讯:
                Private Sub Form_Load ()
                    ' 保存输入子串的缓冲区
                    Dim Instring As String
                    ' 使用 COM1。
                    MSComm1.CommPort = 1
                    ' 9600 波特,无奇偶校验,8 位数据,一个停止位。
                    MSComm1.Settings = "9600,N,8,1"
                    ' 当输入占用时,
                    ' 告诉控件读入整个缓冲区。
                    MSComm1.InputLen = 0
                    ' 打开端口。
                    MSComm1.PortOpen = True
                    ' 将 attention 命令送到调制解调器。
                ' Chr$函数:返回 String,其中包含有与指定的字符代码相关的字符 。
                    MSComm1.Output = "ATV1Q0" & Chr$(13) ' 确保
                    ' 调制解调器以"OK"响应。
                    ' 等待数据返回到串行端口。
                    Do
                       DoEvents
                    Buffer$ = Buffer$ & MSComm1.Input
                    Loop Until InStr(Buffer$, "OK" & vbCRLF)
                    ' 从串行端口读 "OK" 响应。
                    ' 关闭串行端口。
                    MSComm1.PortOpen = False
                End Sub
                注意    MSComm 控件可以采用轮询或事件驱动的方法从端口获取数据。这个简单的例子使用了轮询方法。

                实例1:计算机拨号
                在一些实际应用中经常需要使用计算机拨号。下面这个例子利用MSComm控件操作Modem进行拨号,实现串口通信。
                实现步骤:
                1.建窗体
                添加一个MSComm控件,用来建立与串口的连接;
                添加一个Text控件,Name属性为Txttel,用来输入电话号码;
                添加3个CommandButton控件,Name属性分别为DialButton、CancellButton、QuitButton,分别用来实现拨
                号、中止拨号、中止程序;
                添加一个Label控件,用来显示所有与拨号有关的信息。窗体见图1。
                2.设置MSComm控件属性
                InBufferSize=1024;   ’ InBufferSize 是指整个接收缓冲区的大小。缺省值是 1024 字节。
                Inputlen=0;         ’ InputLen 属性的缺省值是 0。设置 InputLen 为 0 时,使用 Input
                将使 MSComm 控件读取接收缓冲区中全部的内容。
                InputMode=0;        ’0---(缺省)数据通过 Input 属性以文本形式取回。
                                       1--数据通过 Input 属性以二进制形式取回
                Rthreshold=2;       ’ 当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm
                事件。
                RTSEnable=True;     ’ 当 RTSEnable 设置为 True,端口打开时,Request To Send
                线设置为高电平,端口关闭时,设置为低电平。
                Settings=“9600,N,8,1”;
                Sthreshold=0。    ’ 若设置 Sthreshold 属性为 0(缺省值),数据传输事件不会产生 OnComm
                事件。若设置 Sthreshold 属性为 1,当传输缓冲区完全空时,MSComm 控件产生 OnComm 事件。
                因为每一台计算机的串口使用状态都不会一样。为使程序具有通用性,在窗体的Load方法中首先进行串口测试,找到第一个可用串口后再进行设置。
                3.程序功能  
                程序根据输入的电话号码进行拨号,Modem正常拨号后,提示用户摘机,准备通话。
                图1 电话拨号实例
                4.主要方法与事件代码
                '设置可用串口
                Private Sub Form_Load()
                On Error GoTo error_open
                For i = 1 To 4
                MSComm1.CommPort = 1
                MSComm1.PortOpen = True
                '设置可用的第一个串口
                On Error GoTo 0
                Exit Sub
                error_resume:
                Next
                error_open:
                Resume error_resume
                End Sub
                Private Sub DialButton_Click()
                Dim Number$, Temp$
                Number$ = Trim$(Txttel.Text)     ’ 返回 Variant
                (String),其中包含指定字符串的拷贝,没有前导空白 (LTrim)、尾随空白 (RTrim) 或前导和尾随空白 (Trim)。
                If Number$ = “"   Then
                MsgBox “请输入电话号码"
                Txttel.SetFocus
                Exit Sub
                End If
                DialButton.Enabled = False
                QuitButton.Enabled = False
                DialString$ =“ATDT”+ Number$ + “;” + vbCr
          '清除接收缓冲区
          MSComm1.InBufferCount =0
          '拨电话号码
          MSComm1.Output = DialString$
          Lblmessage.Caption = “正在拨号码 -”+Number$
          DialButton.Enabled = True
          QuitButton.Enabled = True
          End Sub
          Private Sub MSComm1_OnComm()
          Select Case MSComm1.CommEvent
          Case comEvReceive
          '读取串口数据
          COMBUF=COMBUF + MSComm1.Input
          lc = InStr(1, COMBUF, “OK”)
          If lc = 0 Then Exit Sub
          'Modem已正常拨号,返回OK
          Lblmessage.Caption = “请您摘下电话机, 准备通话”
          Case comEvSend
          End Select
          End Sub
          Private Sub CancelButton_Click()
          '断开与调制解调器的连接
          MSComm1.Output = “ATH” + vbCr
          End Sub

          实例2:实现来电显示
          在一些实际应用中,需要显示并保存来电号码,并根据电话号码显示相应资料,比如小区物业管理和110报警等系统。
          实现步骤:
          1.创建窗体
          添加一个MSComm控件,用来建立与串口的连接;
          添加4个Option控件,用来确定使用的串口号;
          添加4个Label控件,用来显示来电号码及日期时间;
          添加一个ProgressBar控件,用来显示电话振铃次数;
          为方便调试程序,添加一个Text控件Text 5,用来显示Modem传来的所有信息。窗体见图2。
          图2 来电显示窗体
          2.设置MSComm控件属性
          InBufferSize=1024;
          Inputlen=0;
          InputMode=0;
          Rthreshold=1;
          RTSEnable=True;
          Settings=“9600,N,8,1";
          Sthreshold=0。
          3.程序功能
          程序首先初始化Modem,然后等待来电。当有来电时,MSComm产生OnComm事件。Modem送出的信息格式为“DATE = 月日回车换行TIME
          = 时分回车换行NMBR =
          电话号码回车换行”。在OnComm事件处理程序中对读入信息进行截取,截取电话号码后,以该电话号码为关键字,查询并显示数据库中有关信息。
          4.主要方法与事件代码
          '通用声明部分
          Const DEBFLG = 1
          Public COMX, BEEPNO, HANGUP,PNLOC As Integer
          Public COMBUF, COMLIN As String
          Private Sub Form_Load()
          '检测串行口
          Dim I, C As Integer
          COMX = 0
          COMBUF = “”
          COMLIN = “”
          BEEPNO = 0
          HANGUP = 0
          '正常运行程序,关闭右侧Text5
          If DEBFLG= 0 Then
          Form1.Width = Form1.Width - Text5.Width
          Text5.Enabled = False
          Text5.Visible = False
          End If
          On Error GoTo ERROR_FORM_LOAD
          '检测可用串口
          For C = 1 To 4
          If MSComm1.PortOpen Then MSComm1.PortOpen = False
          MSComm1.CommPort = C
          If Not MSComm1.PortOpen Then
          MSComm1.PortOpen = True
          If MSComm1.PortOpen Then MSComm1.PortOpen = False
          If COMX = 0 Then COMX = C
          FORM_LOAD_1:
          Next C
          If COMX = 0 Then End
          On Error GoTo 0
          Option1(COMX - 1).Value = True
          Exit Sub
          ERROR_FORM_LOAD:
          Option1(C - 1).Enabled = False
          Resume FORM_LOAD_1
          End Sub
          '选择串行口
          Private Sub Option1_Click(Index As Integer)
          COMX = Index + 1
          Call INIT_MODEM
          End Sub
          '初试化Modem
          Private Sub INIT_MODEM()
          If MSComm1.PortOpen Then MSComm1.PortOpen = False
          MSComm1.CommPort = COMX
          If Not MSComm1.PortOpen Then MSComm1.
          PortOpen = True
          MSComm1.Output = “AT#CID=1” + vbCr
          '检查Modem命令是否完成
          Call CHK_MODEM
          MSComm1.Output = “ATS0=0” + vbCr
          End Sub
          '检查Modem命令是否完成
          Private Sub CHK_MODEM()
          Dim T As Single
          Dim L As Integer
          T = Timer
          Do
          COMBUF = COMBUF + MSComm1.Input
          L = InStr(1, COMBUF,“OK”)
          Loop Until L <> 0 Or Timer - T > 1
          If L = 0 Then
          Line1.Visible = True
          Line2.Visible = True
          Form1.Show
          MsgBox “MODEM未联机”,vbOKOnly+vbCritical,“测试MODEM”
          Else
          Line1.Visible = False
          Line2.Visible = False
          End If
          End Sub
          '串行口接收事件处理
          Private Sub MSComm1_OnComm()
          Dim CH, ST As String
          Dim LC As Integer
          Select Case MSComm1.CommEvent
          '接收到Rthreshold个字符
          Case comEvReceive
          COMBUF = COMBUF + MSComm1.Input
          '读取串口数据
          Do
          LC = InStr(1, COMBUF, Chr(10))
          If LC = 0 Then Exit Do
          COMLIN = Left(COMBUF, LC)
          COMBUF = Mid(COMBUF, LC + 1)
          CH = Left(COMLIN, 1)
          If “ ” < CH And CH < Chr(127) And DEBFLG = 1 Then
          Text5.Text = Text5.Text + COMLIN
          Text5.SelStart = Len(Text5.Text)
          End If
          '截取来电号码,并显示
          If InStr(1, COMLIN“NMBR=”)<> 0 Then
          ST = Mid(COMLIN, 8)
          Text2.Text=“ ”+Left$(ST,Len (ST) -2) + “ ”
          Form1.WindowState = 0
          Timer1.Enabled = True
          Call BEEP_NO
          '截取来电日期,并显示
          ElseIf InStr(1, COMLIN, “DATE = ”) <> 0 Then
          Text3.Text = Str(Year(DATE)) + “.”+ Mid(COMLIN, 8, 2) + “.” + Mid(COMLIN,
          10, 2) + “ ”
          '截取来电时间,并显示
          ElseIf InStr(1, COMLIN, “TIME = ”) <> 0 Then
          Text4.Text = “ ” + Mid(COMLIN, 8, 2) + “:” + Mid(COMLIN, 10, 2)
          '检测振铃个数
          ElseIf InStr(1, COMLIN, “RING”) <> 0 Then
          Call BEEP_NO
          If HANGUP = 1 Or BEEPNO = 15 Then Call HANG_UP
          '检测是否停止振铃
          ElseIf Left(COMLIN, 3) = “000” Then
          BEEPNO = 0
          Timer1.Enabled = False
          Form1.WindowState = 1
          ProgressBar1.Value = 0
          Frame3.Caption = “振铃数”
          End If
          Loop
          '其他事件处理
          Case comEvCTS
          Case comEvDSR
          Case comEvCD
          Case comEvRing
          Case comEventBreak
          Call INIT_MODEM
          Case Else
          MsgBox “串口接收事件号:” & MSComm1.CommEvent & “ ”, vbOKOnly +
          vbCritical, “测试串行口”
          End Select
          End Sub

    展开全文
  • 本文叙述了如何在VB中实现控件的IobjectSafety接口,以标志该控件是脚本安全和初始化安全的。VB控件默认的处理方式是注册表注册组件类来标识其安全性,但实现IobjectSafety接口是更好的方法。本言语包括了实现...

    总述
    本文叙述了如何在VB中实现控件的IobjectSafety接口,以标志该控件是脚本安全和初始化安全的。VB控件默认的处理方式是在注册表中注册组件类来标识其安全性,但实现IobjectSafety接口是更好的方法。本言语包括了实现过程中所需的所有代码。

    请注意,控件只有确确实实是安全的,才能被标识为“安全的”。本文并未论及如何确保控件的安全性,这个问题请参阅Internet Client Software Development Kit (SDK)中的相关文档 "Safe Initialization and Scripting for ActiveX Controls",它在Component Development 栏目中。

     

    相关信息:
    <此处略去了一段也许无关紧要的警告>

    现在开始循序渐进地举例说明怎样创建一个简单的VB控件,以及怎样将它标识为脚本安全和初始化安全。
    首先新建一个文件夹来存放在本例中所产生的文件。

    从VB CD-ROM取得OLE 自动化类库的制作工具。将VB安装光盘中\Common\Tools\VB\Unsupprt\Typlib\目录下所有内容一并拷贝到前面新建的项目文件夹中。


    把下列内容拷贝到“记事本”中,然后保存到上述文件夹,文件名为Objsafe.odl:


          [
              uuid(C67830E0-D11D-11cf-BD80-00AA00575603),
              helpstring("VB IObjectSafety Interface"),
              version(1.0)
          ]
          library IObjectSafetyTLB
          {
              importlib("stdole2.tlb");
              [
                  uuid(CB5BDC81-93C1-11cf-8F20-00805F2CD064),
                  helpstring("IObjectSafety Interface"),
                  odl
              ]
              interface IObjectSafety:IUnknown {
                  [helpstring("GetInterfaceSafetyOptions")]
                  HRESULT GetInterfaceSafetyOptions(
                            [in]  long  riid,
                            [in]  long *pdwSupportedOptions,
                            [in]  long *pdwEnabledOptions);

                  [helpstring("SetInterfaceSafetyOptions")]
                  HRESULT SetInterfaceSafetyOptions(
                            [in]  long  riid,
                            [in]  long  dwOptionsSetMask,
                            [in]  long  dwEnabledOptions);
               }
           }
    在命令行提示符下切换到项目文件夹,输入下列命令创建一个.tlb 文件:


    MKTYPLIB objsafe.odl /tlb objsafe.tlb
    在VB中新建一个ActiveX Control 项目。修改属性,把项目命名为IobjSafety,控件命名为DemoCtl。在控件上放置一个按钮,命名为cmdTest,在它的Click事件中加入一句代码 MsgBox "Test" 。


    打开菜单“工程->引用”,点“浏览”,找到刚刚建立的Objsafe.tlb,把它加入到引用中。


    增加一个新module名为basSafeCtl,并在其中加入下列代码:


          Option Explicit

          Public Const IID_IDispatch = "{00020400-0000-0000-C000-000000000046}"
          Public Const IID_IPersistStorage = _
            "{0000010A-0000-0000-C000-000000000046}"
          Public Const IID_IPersistStream = _
            "{00000109-0000-0000-C000-000000000046}"
          Public Const IID_IPersistPropertyBag = _
            "{37D84F60-42CB-11CE-8135-00AA004BB851}"

          Public Const INTERFACESAFE_FOR_UNTRUSTED_CALLER = &H1
          Public Const INTERFACESAFE_FOR_UNTRUSTED_DATA = &H2
          Public Const E_NOINTERFACE = &H80004002
          Public Const E_FAIL = &H80004005
          Public Const MAX_GUIDLEN = 40

          Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
             (pDest As Any, pSource As Any, ByVal ByteLen As Long)
          Public Declare Function StringFromGUID2 Lib "ole32.dll" (rguid As _
             Any, ByVal lpstrClsId As Long, ByVal cbMax As Integer) As Long

          Public Type udtGUID
              Data1 As Long
              Data2 As Integer
              Data3 As Integer
              Data4(7) As Byte
          End Type

          Public m_fSafeForScripting As Boolean
          Public m_fSafeForInitializing As Boolean

          Sub Main()
              m_fSafeForScripting = True
              m_fSafeForInitializing = True
          End Sub
    在工程属性中把启动对象改成Sub Main确保上述代码会被执行。m_fSafeForScripting 和m_fSafeForInitializing两件变量的值分别指定了脚本安全和初始化安全取值。


    打开控件代码窗口,在声明部分加入如下代码(如果有Option Explicit语句,当然要保证代码放在其后):


    Implements IObjectSafety
    把下面两个过程代码拷贝到控件代码中:


          Private Sub IObjectSafety_GetInterfaceSafetyOptions(ByVal riid As _
          Long, pdwSupportedOptions As Long, pdwEnabledOptions As Long)

              Dim Rc      As Long
              Dim rClsId  As udtGUID
              Dim IID     As String
              Dim bIID()  As Byte

              pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER Or _
                                    INTERFACESAFE_FOR_UNTRUSTED_DATA

              If (riid <> 0) Then
                  CopyMemory rClsId, ByVal riid, Len(rClsId)

                  bIID = String$(MAX_GUIDLEN, 0)
                  Rc = StringFromGUID2(rClsId, VarPtr(bIID(0)), MAX_GUIDLEN)
                  Rc = InStr(1, bIID, vbNullChar) - 1
                  IID = Left$(UCase(bIID), Rc)

                  Select Case IID
                      Case IID_IDispatch
                          pdwEnabledOptions = IIf(m_fSafeForScripting, _
                        INTERFACESAFE_FOR_UNTRUSTED_CALLER, 0)
                          Exit Sub
                      Case IID_IPersistStorage, IID_IPersistStream, _
                         IID_IPersistPropertyBag
                          pdwEnabledOptions = IIf(m_fSafeForInitializing, _
                        INTERFACESAFE_FOR_UNTRUSTED_DATA, 0)
                          Exit Sub
                      Case Else
                          Err.Raise E_NOINTERFACE
                          Exit Sub
                  End Select
              End If
          End Sub

          Private Sub IObjectSafety_SetInterfaceSafetyOptions(ByVal riid As _
          Long, ByVal dwOptionsSetMask As Long, ByVal dwEnabledOptions As Long)
              Dim Rc          As Long
              Dim rClsId      As udtGUID
              Dim IID         As String
              Dim bIID()      As Byte

              If (riid <> 0) Then
                  CopyMemory rClsId, ByVal riid, Len(rClsId)

                  bIID = String$(MAX_GUIDLEN, 0)
                  Rc = StringFromGUID2(rClsId, VarPtr(bIID(0)), MAX_GUIDLEN)
                  Rc = InStr(1, bIID, vbNullChar) - 1
                  IID = Left$(UCase(bIID), Rc)

                  Select Case IID
                      Case IID_IDispatch
                          If ((dwEnabledOptions And dwOptionsSetMask) <> _
                       INTERFACESAFE_FOR_UNTRUSTED_CALLER) Then
                              Err.Raise E_FAIL
                              Exit Sub
                          Else
                              If Not m_fSafeForScripting Then
                                  Err.Raise E_FAIL
                              End If
                              Exit Sub
                          End If

                      Case IID_IPersistStorage, IID_IPersistStream, _
                    IID_IPersistPropertyBag
                          If ((dwEnabledOptions And dwOptionsSetMask) <> _
                        INTERFACESAFE_FOR_UNTRUSTED_DATA) Then
                              Err.Raise E_FAIL
                              Exit Sub
                          Else
                              If Not m_fSafeForInitializing Then
                                  Err.Raise E_FAIL
                              End If
                              Exit Sub
                          End If

                      Case Else
                          Err.Raise E_NOINTERFACE
                          Exit Sub
                  End Select
              End If
          End Sub
    保存后,把工程编译成OCX文件。现在控件已经实现了IObjectSafety 接口。在.htm中加入这件控件试一试吧。

    Objsafe.odl
          [
              uuid(C67830E0
    -D11D-11cf-BD80-00AA00575603),
              helpstring(
    "VB IObjectSafety Interface"),
              version(
    1.0)
          ]
          library IObjectSafetyTLB
          {
              importlib(
    "stdole2.tlb");
              [
                  uuid(CB5BDC81
    -93C1-11cf-8F20-00805F2CD064),
                  helpstring(
    "IObjectSafety Interface"),
                  odl
              ]
              
    Interface IObjectSafetyinterface IObjectSafety:IUnknown {
                  [helpstring(
    "GetInterfaceSafetyOptions")]
                  HRESULT GetInterfaceSafetyOptions(
                            [
    in]  long  riid,
                            [
    in]  long *pdwSupportedOptions,
                            [
    in]  long *pdwEnabledOptions);

                  [helpstring(
    "SetInterfaceSafetyOptions")]
                  HRESULT SetInterfaceSafetyOptions(
                            [
    in]  long  riid,
                            [
    in]  long  dwOptionsSetMask,
                            [
    in]  long  dwEnabledOptions);
               }
           }


    basSafeCtl
    Option Explicit

    'IE内部GUID、変更してはいけません
    Public Const IID_IDispatch = "{00020400-0000-0000-C000-000000000046}"
    Public Const IID_IPersistStorage = "{0000010A-0000-0000-C000-000000000046}"
    Public Const IID_IPersistStream = "{00000109-0000-0000-C000-000000000046}"
    Public Const IID_IPersistPropertyBag = "{37D84F60-42CB-11CE-8135-00AA004BB851}"

    Public Const INTERFACESAFE_FOR_UNTRUSTED_CALLER = &H1
    Public Const INTERFACESAFE_FOR_UNTRUSTED_DATA = &H2
    Public Const E_NOINTERFACE = &H80004002
    Public Const E_FAIL = &H80004005
    Public Const MAX_GUIDLEN = 40

    Public Declare Sub CopyMemory()Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen As Long)
    Public Declare Function StringFromGUID2()Function StringFromGUID2 Lib "ole32.dll" (rguid As Any, ByVal lpstrClsId As LongByVal cbMax As IntegerAs Long

    Public Type udtGUID
        Data1 
    As Long
        Data2 
    As Integer
        Data3 
    As Integer
        Data4(
    7As Byte
    End Type

    Public m_fSafeForScripting As Boolean
    Public m_fSafeForInitializing As Boolean

    'スタートアップの設定
    Sub Main()Sub Main()
        m_fSafeForScripting 
    = True
        m_fSafeForInitializing 
    = True
    End Sub




    CallExe
    '参照するインターフェイス、外で定義
    Implements IObjectSafety

    '主要な関数
    Public Sub Run()Sub Run(ByVal app As String)
        
    Shell (app)
    End Sub


    '実現しなければならない安全なインターフェイス
    Private Sub IObjectSafety_GetInterfaceSafetyOptions()Sub IObjectSafety_GetInterfaceSafetyOptions(ByVal riid As Long, pdwSupportedOptions As Long, pdwEnabledOptions As Long)

        
    Dim Rc      As Long
        
    Dim rClsId  As udtGUID
        
    Dim IID     As String
        
    Dim bIID()  As Byte

        pdwSupportedOptions 
    = INTERFACESAFE_FOR_UNTRUSTED_CALLER Or INTERFACESAFE_FOR_UNTRUSTED_DATA

        
    If (riid <> 0Then
            CopyMemory rClsId, 
    ByVal riid, Len(rClsId)

            bIID 
    = String$(MAX_GUIDLEN, 0)
            Rc 
    = StringFromGUID2(rClsId, VarPtr(bIID(0)), MAX_GUIDLEN)
            Rc 
    = InStr(1, bIID, vbNullChar) - 1
            IID 
    = Left$(UCase(bIID), Rc)

            
    Select Case IID
                
    Case IID_IDispatch
                    pdwEnabledOptions 
    = IIf(m_fSafeForScripting, INTERFACESAFE_FOR_UNTRUSTED_CALLER, 0)
                    
    Exit Sub
                
    Case IID_IPersistStorage, IID_IPersistStream, IID_IPersistPropertyBag
                    pdwEnabledOptions 
    = IIf(m_fSafeForInitializing, INTERFACESAFE_FOR_UNTRUSTED_DATA, 0)
                    
    Exit Sub
                
    Case Else
                    Err.Raise E_NOINTERFACE
                    
    Exit Sub
            
    End Select
        
    End If
    End Sub


    '実現しなければならない安全なインターフェイス
    Private Sub IObjectSafety_SetInterfaceSafetyOptions()Sub IObjectSafety_SetInterfaceSafetyOptions(ByVal riid As LongByVal dwOptionsSetMask As LongByVal dwEnabledOptions As Long)
          
        
    Dim Rc          As Long
        
    Dim rClsId      As udtGUID
        
    Dim IID         As String
        
    Dim bIID()      As Byte

        
    If (riid <> 0Then
            CopyMemory rClsId, 
    ByVal riid, Len(rClsId)

            bIID 
    = String$(MAX_GUIDLEN, 0)
            Rc 
    = StringFromGUID2(rClsId, VarPtr(bIID(0)), MAX_GUIDLEN)
            Rc 
    = InStr(1, bIID, vbNullChar) - 1
            IID 
    = Left$(UCase(bIID), Rc)

            
    Select Case IID
                
    Case IID_IDispatch
                    
    If ((dwEnabledOptions And dwOptionsSetMask) <> INTERFACESAFE_FOR_UNTRUSTED_CALLER) Then
                        Err.Raise E_FAIL
                        
    Exit Sub
                    
    Else
                        
    If Not m_fSafeForScripting Then
                            Err.Raise E_FAIL
                        
    End If
                        
    Exit Sub
                    
    End If

                
    Case IID_IPersistStorage, IID_IPersistStream, IID_IPersistPropertyBag
                    
    If ((dwEnabledOptions And dwOptionsSetMask) <> INTERFACESAFE_FOR_UNTRUSTED_DATA) Then
                        Err.Raise E_FAIL
                        
    Exit Sub
                    
    Else
                        
    If Not m_fSafeForInitializing Then
                            Err.Raise E_FAIL
                        
    End If
                        
    Exit Sub
                    
    End If

                
    Case Else
                    Err.Raise E_NOINTERFACE
                    
    Exit Sub
            
    End Select
        
    End If
    End Sub




    WebForm1
    <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="HelloWorld.WebForm1" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
        
    <HEAD>
            
    <title>WebForm1</title>
            
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
            
    <meta name="CODE_LANGUAGE" Content="C#">
            
    <meta name="vs_defaultClientScript" content="JavaScript">
            
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        
    </HEAD>
        
    <body MS_POSITIONING="GridLayout">
            
    <form id="Form1" method="post">
                
    <OBJECT id="ActiveX_Test" classid="CLSID:04DA805C-01A2-43E7-BE32-30D2FD263A84"
                    VIEWASTEXT
    >
                
    </OBJECT>
                
    <INPUT id="app" style="Z-INDEX: 101; LEFT: 104px; POSITION: absolute; TOP: 112px" type="text">
                
    <input id="button1" type='submit' onclick='ActiveX_Test.Run(document.getElementById("app").value)'
                    
    value='OK' style="Z-INDEX: 102; LEFT: 280px; WIDTH: 64px; POSITION: absolute; TOP: 112px; HEIGHT: 24px">
                
    <DIV style="DISPLAY: inline; Z-INDEX: 103; LEFT: 48px; WIDTH: 440px; POSITION: absolute; TOP: 56px; HEIGHT: 40px"
                    ms_positioning
    ="FlowLayout">
                    
    <DIV id="BABFT_TextSrcFixed" dir="ltr" style="PADDING-RIGHT: 4px; DISPLAY: block; PADDING-LEFT: 4px; BACKGROUND: #fffef2; PADDING-BOTTOM: 0px; MARGIN: 2px; PADDING-TOP: 0px; TEXT-ALIGN: left">実行するプログラム名、または開くフォルダやドキュメント名、インターネット 
                        リソース名を入力してください。
    </DIV>
                
    </DIV>
                
    <DIV style="DISPLAY: inline; Z-INDEX: 104; LEFT: 48px; WIDTH: 48px; POSITION: absolute; TOP: 112px; HEIGHT: 18px"
                    ms_positioning
    ="FlowLayout">名前:</DIV>
            
    </form>
        
    </body>
    </HTML>

    转载于:https://www.cnblogs.com/hbbpb/archive/2007/10/05/914608.html

    展开全文
  • Vb中VSFlexGrid控件的应用

    千次阅读 2015-03-10 18:15:48
    说明:O代表VSFlexGrid控件的名称,A代表当前属性名称,|代表可选  属性/方法名称 功能 示例语法 AddItem()

    说明:O代表VSFlexGrid控件的名称,A代表当前属性名称,|代表可选

          属性/方法名称                                                 功能                                               示例语法   

    AddItem()                                                增加一行                                              O.A   String[,   RowIndex] 

    Aggregate                                               返回集合合计(总数,平均,等等)         O.A   =   (A,Row1,Col1,Row2,Col2)   

    Align                                                        对象在窗体上的显示位置                   O.A   =   0|1|2|3|4   

    AllowBigSelection         设定列头是否整行或整列选择           O.A   =   True|False   

            AllowSelection               是否可多单元选择                               O.A   =   True|False   

            AllowUserFreezing         运行时用鼠标冻结行或列                   O.A   =   0|1|2|3   

            AllowUserResizing         调整(行/列)大小方式                           O.A   =   0|1|2|3|4   

            Appearance                       边框平面/凹陷/凸起                             O.A   =   0|1|2   

            Archive()                         存储或清除一个二进制文件内容       O.A   ArcFileName,FileName,0|1|2|3   

            ArchiveInfo                     返回一个二进制文件信息                   O.A   ArcFileName,0|1|2|3|4,LineIndex   

            AutoReSize                       是否自动调整大小                               O.A   =   True|False   

      AutoSearch                       设置自动搜索                                       O.A   =   0|1|2   

      AutoSearchDelay             设置AutoSearch多少秒刷新               O.A   =   2   

      AutoSize()                       自动调整列到指定宽度                       O.A   Col1,Col2,True|False,1000   

      AutoSizeMode                   自动调整适合行列内容                       O.A   =   0|1   

      AutoSizeMouse                 是否双击列首自动调整适合行列       O.A   =   True|False   

      BackColor                         所有非固定行列的背景色                   O.A   =   Color   

      BackColorAlternate       所有非固定行列的交替行颜色           O.A   =   Color   

      BackColorBkg                   表格背景坐底色                                   O.A   =   Color   

      BackColorFixed               固定的行/列背景色                             O.A   =   Color   

      BackColorFrozen             冻结部分的行列背景色                       O.A   =   Color   

      BackColorSel                   单元被选中的背景色                           O.A   =   Color   

      BindToArray()                 绑定数组                 O.A   ArrayStr,RowDim,ColDim,PageDim,CurrentPage   

      Bookmark                           返回ADO   Recordset行书签(只读)     O.A(Row)   

      BorderStyle                     边框粗细样式                                         O.A   =   0|1   

      BottomRow                         返回可见范围的最大行号(只读)          O.A   

      BuildComboList()           将数据库中的内容写入下拉框            O.A(rs,   FieldList,   KeyField,   BackColor)   

      CausesValidation           目标事件确认                                 O.A   =   False|True   

      Cell                                   选择部分的相应准则值                       O.A(准则,   Row1,   Col1,   Row2,   Col2)   =   准则值   

    准则的定义:

    flexcpAlignment        对齐方式      flexcpBackColor        背景色

    flexcpChecked 选择框        flexcpCustomFormat       格式设置

    flexcpData           日期          flexcpFloodColor        颜色

    flexcpFloodPercent 背景色        flexcpFont                        字体

    flexcpFontBold 粗体     flexcpFontItalic         斜体

    flexcpFontName 字体名        flexcpFontSize         字体大小

    flexcpFontStrikethru 删除线        flexcpFontUnderline       下划线

    flexcpFontWidth         字符宽        flexcpForeColor        字符色

    flexcpHeight   高                flexcpLeft

    flexcpPicture 添加图        flexcpPictureAlignment 图对齐

    flexcpRefresh 刷新            flexcpSort 分类

    flexcpText        字符             flexcpTextDisplay 显示字符

    flexcpTextStyle       文本样式      flexcpTop 返回顶端高,同RowPos和 valueMatrix 属性 

    flexcpvalue       返回字符值   flexcpVariantvalue 返回字符值

    flexcpWidth         返回单元宽

      CellAlignment                 设定单元里数据的排列方式               O.A   =   0   至   9   

      CellBackColor                 指定单元范围的背景颜色                   O.A   =   Color   

      CellBorder()                   选择单元范围的边界颜色                   O.A   Color,左,上,右,下,垂直,水平   

      CellButtonPicture         选择单元范围的按钮图片                   O.A   =   LoadPicture("D:\Icon.ico")   

      CellChecked                     选择单元范围的复选框                       O.A   =   0|1|2   

      CellFloodColor               选择单元范围的流程颜色                   O.A   =   Color   

      CellFloodPercent           选择单元范围的流程百分比               O.A   =   1   至   100   

      CellFontBold                   指定单元范围设为黑体字                   O.A   =   False|True   

      CellFontItalic               指定单元范围设为斜体字                   O.A   =   False|True   

      CellFontName                   对象所使用的字体名称                       O.A   =   FontName   

      CellFontSize                   对象文字像数大小(默认9pt)             O.A   =   9   

      CellFontStrikethru       选择范围是否有删除线                       O.A   =   False|True   

      CellFontUnderline         选择范围是否有下画线                       O.A   =   False|True   

      CellFontWidth                 设定单元或指定范围字体的宽度       O.A   =   2   

      CellForeColor                 设定单元或指定范围字体的颜色       O.A   =   Color   

      CellHeight                       返回/显示到当前单元高度(只读)     O.A   

      CellLeft                           返回当前单元的左端位置(只读)       O.A   

      CellPicture                     显示在单元或指定范围中的图片       O.A   =   LoadPicture("D:\Icon.ico")   

      CellPictureAlingment   单元或指定范围图片的显示位置       O.A   =   0   至   10   

    CellTextStyle                 设定单元文本的显示形式                   O.A   =   0|1|2|3|4   

    CellTop                             返回当前单元的顶端位置(只读)       O.A   

    CellWidth                         返回当前单元的宽度(只读)               O.A   

    Clear()                             清除表格内容                                       O.A([0|1|2],[0|1|2|3])   

      ClientHeight                   返回客户可见范围高度                       O.A   

      ClientWidth                     返回客户可见范围宽度                       O.A   

      Clip                                   设置选择范围的内容                           O.A   =   Text   

      ClipSeparators               ???   

      Col                                     设置激活单元的列号                           O.A   =   2   

      ColAlignment                   列对齐排列方式                                   O.A(Col)   =   0   至   9   

      ColComboList                   向下拉框写入管道字符                       O.A(Col)   =   "|ListStr1|ListStr2|..."   

      ColData                             设置用户定义的长整形数据               O.A(Col)   =   UserLong   

      ColDataType                     列数据类型                                           O.A(Col)=0至14到20(&H14),30(&H1E),31(&H1F)   

    说明:  
    flexDTEmpty  0 flexDTNull   1    flexDTShort 2       flexDTLong 3            flexDTSingle 4

    flexDTDouble 5 flexDTCurrency 6     flexDTDate 7       flexDTString 8            flexDTDispatch 9 

    flexDTError    10   flexDTBoolean 11    flexDTVariant 12    flexDTUnknown 13   flexDTDecimal  14  

    flexDTLong8 20   flexDTStringC 30      flexDTStringW 31 

      ColEditMask                     列编辑套用格式字符串                       O.A(Col)   =   指定的格式如:######   

      ColFormat                         格式化显示列                                       O.A(Col)   =   "Currency"|"#.###%"...   

    说明:其中

    Format()是String对象处理函数,Format()共有8中固定格式,测试数据12345.12345               

    1>General Number格式:与原数据保持一致。Format("Gerneral Number")          12345.12345                

    2>Fixed 格式:小数点右边按四舍五入保留两位小数。Format("Fixed")       12345.12              

    3>Standard格式:使用千分隔符,小数点右边按四舍五入保留两位数字。 12,345.12            

    4>Percent格式:乘100后加“%”符号,小数点右边四舍五入保留两位数字。 1234512.34%              

    5>Scientific格式:按科学计算实用记数法。  1.24E+04              

    6>Yes/No 格式:数字为0时显示No,否则为Yes。   Yes            

    7>True/False格式:数字为0时显示False,否则为True。True               

    8>On/Off          

    格式:数字为0时显示Off,否则为On。   On   
        
    除了固定格式之外,Format还可以自己定义输出格式:
                
    “0”:占位符,必须出现的数字位,如果该位没有数字以0补充。

    “#”:占位符,可以省略的数字位。

    “%”:百分号占位符。将表达式乘100后,加上%。

    ”.”:小数点占位符。

    “,“ :千分隔符。

      ColHidden                         是否隐藏指定列                                   O.A(Col)   =   True|False   

      ColImageList                   设置图像列表句柄到列   
      ColIndent                         缩进指定列                                           O.A   Col=   100   

      ColIndex                           返回列索引(只读)                               O.A   Col   

      ColIsVisible                   返回列是否可见(只读)                       O.A   Col   

      ColKey                               设置列钥匙                                           O.A(Col)   =   KeyStr   

      ColPos                               返回列距左边宽度(只读)                   O.A   Col   

      ColPosition                     移动列的位置                                       O.A(Col)   =   ReCol   

      Cols                                   返回/设置总列数                                 O.A   =   2   

      ColSel                               返回/设置最后选择的列                     O.A   =   3   

      ColSort                             设置列种类                                           O.A(Col)   =   0   至   10   

      ColWidth                           返回/设置指定列宽                             O.A(Col)   =   100   

      ColWidthMax                     最大列宽                                               O.A(Col)   =   5000   

      ColWidthMin                     最小列宽                                               O.A(Col)   =   100   

      ComboCount                       取得Combo下拉按钮总数(只读)         O.A   

      ComboData                         Combo下拉按钮数据(只读)                 O.A   

      ComboIndex                       Combo下拉按钮索引                             O.A   =   1   

      ComboItem                         Combo下拉按钮项目(只读)                 O.A   

      ComboList                         向下拉框写入管道字符内容               O.A   =   "a|b|c"   

    ComboSearch                     Combo下拉按钮搜寻方式                     O.A   =   0|1|2|3   

      Container                         返回/设置对象的容器                         O.A.Caption   =   "Forms"   

      DataBindings                   返回数据装入数(只读)                       O.A   

      DataMember                       返回/设置数据描述成员                     O.A   =   DataStr   

      DataMode                           设置数据链接状态                               O.A   =   0|1|2|3|4   

      DataRefresh()                 刷新数据源                                           O.A   

      DataSource                       设置数据源                                           Set   O.A   =   DataDim   

      Drag()                               拖放                                                       O.A   [0|1|2]   

      DragIcon                           拖放图标                                               O.A   =   LoadPicture("D:\Icon.ico")   

      DragMode                           拖放方式                                               O.A   =   0|1   

      DragRow()                         拖放行(本示例在MouseDown过程)     O.A   O.RowSel   

      Editable                           设置表格是否可编辑修改                   O.A   =   0|1|2   

      EditCell()                       当移动到当前单元时自动选择           O.A   

      EditMask                           当编辑时只能使用指定值                   O.A   =   Strvalue   

      EditMaxLength                 所有单元限制字节大小                       O.A   =   2   

      EditSelLength                 编辑时选择长度                                   O.A   =   5   

      EditSelStart                   移动到单元时的光标位置                   O.A   =   0(或者Len(vsg.text))   

      EditSelText                     编辑选择处放文本                               O.A   =   "Str"   

      EditText                           编辑文本                                               O.A   =   "Str"   

      EditWindow                       返回编辑窗口(只读)                           O.A   

      Ellipsis                           超宽字符加省略号                               O.A   =   0|1|2   

      Enabled                             对象是否激活可用                               O.A   =   False|True   

      ExplorerBar                     单击列头的选择、拖动或排序样式   O.A   =   0   至   15   

      ExtendLastCol                 是否扩充最后的列到适合宽度           O.A   =   False|True   

      FillStyle                         是否改变当前范围的内容或格式       O.A   =   0|1   

      FindRow                             查找符和条件返回的行(只读)           O.A   FindStr,[Row],[Col],[敏感],[精度])   

      FinishEditing()             完成编辑的                                           O.A   =   False|True   

      FixedAlignment               固定列的对齐方式                               O.A(Col)   =   0   至   9   

      FixedCols                         固定几列                                               O.A   =   1   

      FixedRows                         固定几行                                               O.A   =   1   

      FlexDataSource               流动数据源                                           O.A   =   rsDate   

      FloodColor                       设置流程颜色                                       O.A   =   Color   

      FocusRect                         单元的选择虚框样式类型                     O.A   =   0|1|2|3|4|5   

      Font                                   设定字体                                               O.A   =   FontName   

      FontBold                           设定字体粗体                                       O.A   =   False|True   

      FontItalic                       设定字体斜体                                       O.A   =   False|True   

      FontName                           设定字体名称                                       O.A   =   FontName   

      FontSize                           设定字体大小                                       O.A   =   10   

      FontStrikethru               设定字体删除线                                   O.A   =   False|True   

      FontUnderline                 设定字体下划线                                   O.A   =   False|True   

      FontWidth                         设定字体的宽度(非间距)                   O.A   =   2   

      ForeColor                         设定字体前景颜色                               O.A   =   Color   

      ForeColorFixed               设定固定单元的文本颜色                   O.A   =   Color   

      ForeColorFrozen             设定字体冻结部分的前景颜色           O.A   =   Color   

      ForeColorSel                   设定选择单元的文本颜色                   O.A   =   Color   

      FormatString                   设计管道符格式化行/列字符串         O.A   =   Format(1,"#0.00")   

      FrozenCols                       需要冻结的列数                                   O.A   =   2   

      FrozenRows                       需要冻结的行数                                   O.A   =   2   

      GetMergedRange()           ???获得合并山脉   

      GetNode()                         ???获得节点   

      GetNodeRow()                   ???获得节点行   

      GetSelection()               ???获得选择                                       O.A   Row1,   Col1,   Row2,   Col2   

      GridColor                         单元行列的网格线颜色                       O.A   =   Color   

      GridColorFixed               设定固定网格线的颜色                       O.A   =   Color   

      GridLines                         可编辑区的网格线类型                       O.A   =   0   至   14   

      GridLinesFixed               固定行列网格效果类型                       O.A   =   0   至   14   

      GridLineWidth                 编辑区的网格线线粗细                       O.A   =   1   

      Height                               设置对象高度                                       O.A   =   1000   

      HelpContextID                 对象缺省上下文帮助ID                       O.A   =   HelpID   

      HighLight                         是否突出加亮显示选中单元               O.A   =   0[无]|1[默认]|2[仅焦点时有]   

      hWnd                                   获取对象句柄                                       O.A   

      Index                                 对象索引号(运行时只读)                   O.A   

      IsCollapsed                       

      IsSelected                       是否已选择                                           O.A   

      IsSubtotal                       是否已小记                                           O.A   

      Left                                   对象距左边位置                                   O.A   =   100   

      LeftCol                             指定显示在最左边的列                       O.A   =   1   

      LoadArray()                     载入数组   

      LoadGrid()                       载入网格                                               O.A   FileName,   0   至   6[,True(含固定行列)|False]   

      LoadGridURL()                 载入网格URL   

      MergeCells                       相同内容的单元格合并类型               O.A   =   0|1|2|3|4|5|6   

      MergeCol                           是否上下列合并                                   O.A(Col)   =   True   

      MergeCompare                   返回/设置合并比较类型                     O.A   =   0|1|2   

      MergeRow                           是否左右行合并                                   O.A(Row)   =   True   

      MouseCol                           返回鼠标指向的当前列号                   O.A   

      MouseIcon                         设定鼠标指向的当前图形                   O.A   =   LoadPicture("C:\.ico")   

      MousePointer                   设置对象的鼠标指针样式                   O.A   =   0   到   15|99   

      MouseRow                           返回鼠标指向的当前行号                   O.A   

      Move()                               移动对象                                               O.A   Left,[Top],[Width],[Height]   

      MultiTotals                     Multi总数   

    Name                                   对象名称(运行时只读)                       O.A   

      NodeClosedPicture         节点封闭的图标                                   O.A   =   LoadPicture("C:\.ico")   

      NodeOpenPicture             节点打开的图标                                   O.A   =   LoadPicture("C:\.ico")   

      Object                               返回/设置该对象变量                         Set   DimObjName   =   O.A   

      OLEDrag()                         OLE拖拽数据                                         O.A   

      OLEDragMode                     OLE拖拽方式                                         O.A   =   0|1   

      OLEDropMode                     OLE拖拽落下方式                                 O.A   =   0|1|2   

      Outline()                         ???外面的线   

      OutlineBar                       返回/设置显示目录树的线条               O.A   =   0   至   6   

      OutlineCol                       ???外面的线列   

      OwnerDraw                         返回或设置执行   DrawCell   事件       O.A   =   0   至   6   

      Parent                               返回该对象所在的对象(只读)           O.A.Caption   =   "Forms"   

      Picture                             返回控件的图片(只读)                       O.A.属性|方法   =   相应值   

      PicturesOver                   返回控件图片结束                               O.A   =   False|True   

      PictureType                     用Picture属性生成的图片类型         O.A   =   0|1   

      PrintGrid()                     打印网格数据                                       O.A   ["主题",True|False,1|2,左右空,上下空]   

      Redraw                               设定是否刷新控件                               O.A   =   0|1|2   

      Refresh()                         刷新表格                                               O.A   

      RemoveItem()                   删除指定行                                           O.A   VSG1.RowSel   

      RightCol                           返回右边最大的可见列范围               O.A   

      RightToLeft                     是否将固定行放到右边                       O.A   =   True   

      Row                               设置激活单元的行号                           O.A   =   2

      RowData             设置用户定义的长整形数据               O.A(Row)   =   UserLong     

    RowHeight                         返回/设置指定行高                             O.A(Row)   =   100   

      RowHeightMax                   行高的最大值                                       O.A(Row)   =   500   

      RowHeightMin                   行高的最小值                                       O.A(Row)   =   230   

      RowHidden                         是否隐藏指定行                                   O.A(2)   =   True|False   

      RowIsVisible                   返回行是否在可见范围中(只读)       O.A(Row)   

      RowOutlineLevel             返回/设置水平行小记                         O.A(Row)   =   0|1   

      RowPos                               返回行距上边高度(只读)                   O.A   Row   

      RowPosition                     移动行的位置                                       O.A(Row)   =   NewRow   

      Rows                                   返回/设置总行数                                 O.A   =   2   

      RowSel                               返回/设置最后选择的行                     O.A   =   2   

      RowStatus                         设置行状态                                           O.A   =   0|1|2|3   

      SaveGrid()                       保存网格内容到二进制文件               O.A   FileName,   0   至   6[,True(含固定行列)|False]   

      ScrollBars                       设定卷动轴的方式                               O.A   =   0|1|2|3   

      ScrollTips                       卷轴提示                                               O.A   =   False|True   

      ScrollTipText                 卷轴提示文本                                       O.A   =   "Text"   

      ScrollTrack                     行是否随拖动条卷动显示                   O.A   =   False|True   

      Select()                           选择行列范围                                       O.A   Row,Col[,RowSel][,ColSel]   

      SelectedRow                     已选择行(只读)                                   O.A(Row)   

      SelectedRows                   返回所选总行数(只读)                       O.A   

      SelectionMode                 设置单元焦点选中方式                       O.A   =   0|1|2|3   

      SetFocus()                       设置到对象焦点                                   O.A   

      SheetBorder                     表格边框颜色                                       O.A   =   Color   

      ShowCell()                       立刻显示到指定单元                           O.A   Row,   Col   

      ShowComboButton             是否显示当选择时拉下按钮               O.A   =   0|1|2   

      ShowWhatsThis()             显示“这是什么”                                    O.A   

      Sort                                   按照选择的基准重新排序顺序方式     O.A   =   0   到   10   

      Subtotal()                       小计                                                       O.A   属性名[,其它共9个可省略参数]   

      SubtotalPosition           是否小计上面或下面的数值               O.A   =   0|1   

      TabBehavior                     Tab键跳转顺序禁止                             O.A   =   0|1   

      TabIndex                           对象的Tab选择顺序                             O.A   =   2   

      TabStop                             是否允许Tab自动选择                         O.A   =   True|False   

      Tag                                     存储数据时所需的附加数据               O.A   =   Str   

      Text                                   返回/写入当前单元的文字                 O.A   =   Str   

      TextMatrix                       返回/写入指定单元的文字                 O.A(Row,   Col)   =   Str   

      TextStyle                         单元格文字效果                                   O.A   =   0|1|2|3|4   

      TextStyleFixed               固定行列文本的3D效果                       O.A   =   0|1|2|3|4   

      ToolTipText                     鼠标指向表格的说明消息                   O.A   =   "TextString"   

      Top                                     对象上边距                                           O.A   =   100   

      TopRow                               指定显示在最上面的行                       O.A   =   5   

      TreeColor                         目录树颜色                                           O.A   =   Color   

      value                                 返回当前单元数值部分(只读)           O.A   

      valueMatrix                     返回指定单元数值部分(只读)           O.A   Row,   Col   

      Version                             返回控件的版本号(只读)                   O.A   

      VirtualData                     虚拟数据                                             O.A   =   True|False   

      Visible                             是否显示对象                                       O.A   =   True|False   

      WallPaper                         表格壁纸背景图     O.A=LoadPicture(Image)   |   O.A.属性|方法   =   相应值   

      WallPaperAlignment       壁纸背景图墙报对齐方式                   O.A(Col)   =   0   至   10   

      WhatsThisHelpID             设置与对象相关联的上下文号           O.A   =   HelpIDString   

      Width                                 设置对象宽度                                       O.A   =   5000   

      WordWrap                           设定单元中的文本是否换行               O.A   =   True|False   

      ZOrder()                           设置对象Z顺序                                     O.A   0|1   

    展开全文
  •  这里的ActiveX控件是指VB标准工具箱里没有的控件,用时需从“工程”菜单里选择“部件…”(或右键单击工具箱,从快捷菜单选择“部件…”),从部件窗口里勾上需要的控件。 常用ActiveX控件 ...
  • 在VB6实现Kodak控件编程

    千次阅读 2006-03-29 09:08:00
    一、Kodak控件介绍 映像KODAKIMG.EXE是Windows 95/ 98/NT 和 Windows 2000用于图像扫描、浏览和编辑的附件程序(WINDOWS安装过程是可选的),分为自由版和专业版(需另外购买)。Windows的安装过程,4个...
  • 如何用VB写安全控件

    2010-03-13 18:21:00
    总述 本文叙述了如何在VB中实现控件的IobjectSafety接口,以标志该控件是脚本安全和初始化安全的。VB控件默认的处理方式是注册表注册组件类来标识其安全性,但实现IobjectSafety接口是更好的方法。本言语包括了...
  • vb.net控件

    2020-04-28 14:49:22
    vb.net 的 Label 控件 label(标签)控件用于显示文本,是设计应用程序界面时经常要用到的控件之一, 主要是用于显示其他控件名称,描述程序运行状态或标识程序运行的结果信息等 等,响应程序的事件或跟踪程序运行的...
  • VB中使用WinSock控件编写网络程序

    千次阅读 2012-08-01 16:30:10
    WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据... 创建客户端应用程序,它能信息到达中央服务器之前把用户的信息收集起来。  创建服务端应用程序,它能作为来自多个用户的数据一个集中处理点
  • VB中 MSComm串口操作控件使用详解

    万次阅读 2011-08-17 15:19:35
    MSComm控件使用详解  MSComm 控件通过串行端口传输和接收数据,为应用程序提供...MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数, 而且VC、VB、Delphi等语言均可使用。 Micro
  • 解决用VB6.0的某些控件时总是提示“该部件的许可证信息没有找到,设计环境,没有合适的许可证使用该功能”
  • [转载]VB中CommonDialog控件的使用

    万次阅读 2011-09-01 16:52:40
    CommonDialog控件 1.添加到工具箱 执行菜单命令:工程 | 部件| 使Microsoft CommonDialog Contral 6.0复选框有效。...工具箱双击CommonDialog图标可将控件添加到窗体去。 2.属性  因为CommonDial
  • VB常用控件介绍

    千次阅读 2018-02-16 16:24:30
    2、Label(标签)控件 3、TextBox(文本框)控件 4、RichTextBox控件 5、NumericUpDown控件 6、Button(按钮)控件 7、GroupBox(分组框)控件 8、RadioButton(单选按钮)控件 9、CheckBox(复选框)控件 10...
  • VB.NET的TextBox控件详解

    万次阅读 2007-09-01 11:41:00
    VB.NET的TextBox控件详解 TextBox组件(文本框组件)是一种常用的,也是比较容易掌握的组件。应用程序主要使用它来接收使用者于输入文字信息。前面内容已经或多或少的接触到TextBox组件。本节就来详细探讨...
  • WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器并进行数据...就像定时器控件一样,WinSock控件运行时没有一个可视的界面。 一、WinSock简介 Socket(套接字)最初是由加...
  • VB2005调用其他控件的某个事件

    千次阅读 2007-08-05 13:06:00
    普通方法 程序若为A控件的某个事件编写了程序,但又需要B控件的某个事件被触发的情况下运行A控件的程序,可以用下列代码: Me.btnA_click(nothing,nothing) 请VB6程序员注意此变化。二.VB2005的新方法 ...
  • VB.NET 串口控件的使用和说明

    千次阅读 2017-09-04 23:18:49
    一、认识串口控件,名称SerialPort,调用方式如下图所示。 二、串口常用参数说明**BaseStream 获取 SerialPort 对象的基础 Stream 对象。 BaudRate 获取或设置串行波特率。 BreakState 获取或设置中断信号状态。 ...
  • VB treeview控件应用

    千次阅读 2007-11-29 13:21:00
    相信很多编程爱好者都使用过网络蚂蚁或 FoxMail 软件,其软件运行主界面的左侧有一... 首先 VB 建立一个新工程,单击“工程/部件”,在控件列表选中“Microsoft Windows command controls6.0(sp4)”,按下“确定
  • 一、控件分类 ...内部控件总是出现工具箱,不象 ActiveX 控件和可插入对象那样可以添加到工具箱,或从工具箱删除。包括:CheckBox(复选框)、ComboBox(组合框)、CommandButton(命令按...
  • 如何用VB写安全控件(从MSDN引用)

    千次阅读 2004-12-24 09:35:00
    总述 本文叙述了如何在VB中实现控件的IobjectSafety接口,以标志该控件是脚本安全和初始化安全的。VB控件默认的处理方式是注册表注册组件类来标识其安全性,但实现IobjectSafety接口是更好的方法。本言语包括了...
  • VB,NET 验证码控件

    2016-01-16 10:07:20
    而采用验证码控件能够很方便的使用验证码 下面就简单讲述一下一个简单的验证码控件的开发过程。  一个验证码控件的组成部分如下: 1.输入框,用于输入验证码 这里使用textbox 2.图片框...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,845
精华内容 2,338
关键字:

在vb中下列控件中