⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 03.txt

📁 介绍VB里的各种控件的使用方法,窗口控制,图像编程以及OCX等内容,还提供了一个API集供参考.
💻 TXT
📖 第 1 页 / 共 2 页
字号:

◆使用PropertyBag对象

  用户还需要为WriteProperties和ReadProperties事件创建代码,从而保护DataServername、DataBaseName、AdministratorName、PasseordName属性在设计阶段的属性值。这两个事件都使用PropertyBag 对象保存和检索DataServername、DataBaseName、AdministratorName、PasseordName属性的值。PropertyBag对象能够保持DataServername、DataBaseName、
AdministratorName、PasseordName的设计值。具体实现代码如下:

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  m_DataServerName = PropBag.ReadProperty("DataServerName",
            m_def_DataServerName)
  m_DataBaseName = PropBag.ReadProperty("DataBaseName",
            m_def_DataBaseName)
  m_AdministratorName = PropBag.ReadProperty("AdministratorName", m_def_AdministratorName)
  m_PasswordName = PropBag.ReadProperty("PasswordName",
            m_def_PasswordName)
End Sub

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  Call PropBag.WriteProperty("DataServerName", m_DataServerName,
            m_def_DataServerName)
  Call PropBag.WriteProperty("DataBaseName", m_DataBaseName,
            m_def_DataBaseName)
  Call PropBag.WriteProperty("AdministratorName",
          m_AdministratorName, m_def_AdministratorName)
  Call PropBag.WriteProperty("PasswordName", m_PasswordName,
          m_def_PasswordName)
End Sub

  由于这两个过程是针对"容器"对象的,因此所有属性值的保存和读取都通过这两个过程来实现,而不是每个属性都需要单独的两个过程。其中,PropertyBag就是"容器对象"的名称。

  WriteProperty方法有三个参数:第一个字符串标识需要保存的属性,第二个参数是需要保存的值,最后的参数是属性的缺省值。

  ReadProperty 方法需要两个参数:一个字符串用来保存属性的名称,另一个为缺省值。

  在窗体上绘制ActiveX控件的那一刻,就会开始执行ActiveX控件的代码。在控件设计过程中,将DataServername、DataBaseName、AdministratorName、PasseordName属性的默认值设置为:

Const m_def_DataServerName = "lyc"
Const m_def_DataBaseName = "pubs"
Const m_def_AdministratorName = "sa"
Const m_def_PasswordName = ""

  当然,也可以在程序运行时多次修改它。控件的正常行为是当程序终止时恢复其默认值,这样增加了保持属性的两种独立状态的要求。

  简言之,如果在设计阶段改变了一个属性值,那么控件必须得到这个新值,而不是使用默认值。相反,如果在程序运行时改变属性值,那么当返回设计状态时,控件必须检索此属性值。

  PropertyBag对象允许ActiveX控件存贮有关它自己的属性值,使它能执行这个动作。PropertyChanged 方法会通知用户已经改变了一个属性。通过了解程序的状态以及是否调用了PropertyChanged方法,VB 就可以激发WriteProperties和ReadProperties事件。

◆为ShowDataBase方法编写代码

 ShowDataBase方法实现在ListView控件中显示Select命令所执行的数据库操作结果。在其具体实现过程中采用了 ADO(ActiveX Data Objects)的数据存取方法。ADO的主要特点是使用更加容易,访问速度更快,而对磁盘和存储容量的要求更小,ADO支持建立各种客户/服务器模式与基于Web的应用程序,具有远程数据服务RDS(Remote Data Service)的特性,通过RDS能够在一次往返中将服务器端的数据传送到客户端的应用程序或Web页面中,并在客户端对数据进行处理后,立即更新服务器端的数据。采用ADO所基于的OLE DB技术,可以对电子邮件、文本文件、数据表格等各类数据通过统一的接口API接口进行存取,是远程数据存取的一个主要发展方向。ShowDataBase方法具有一个字符串参数,但无任何返回值,具体代码如下所示:
Public Sub showdatabase(ssql As String)
Dim AdoDatabase As New ADODB.Connection
Dim AdoTable As New ADODB.Recordset
Dim scnn As String
Dim response As String
Dim I As Integer
On Error GoTo errorhandle
scnn = "Provider=SQLOLEDB;Data Source=" 
& Trim(m_DataServerName) & ";
Initial Catalog=" & Trim(m_DataBaseName) & ";
User Id=" & Trim(m_AdministratorName) & ";
Password=" & Trim(m_PasswordName) & ";"
AdoDatabase.Open scnn
AdoTable.CursorType = adOpenKeyset
AdoTable.LockType = adLockOptimistic
AdoTable.CursorLocation = adUseClient
AdoTable.Open ssql, AdoDatabase, , , adCmdText
If AdoTable.BOF And AdoTable.EOF Then
response = MsgBox("没有符合条件的记录!!", 
vbOKOnly + vbInformation, "数据库控件")
AdoTable.Close
Set Adotable=Nothing
AdoDatabase.Close
Set AdoDataBase=Nothing
Exit Sub
End If
ListView1.ColumnHeaders.Clear
ListView1.ListItems.Clear
Dim clmX As ColumnHeader
For I = 0 To AdoTable.Fields.Count - 1
Set clmX = ListView1.ColumnHeaders.Add()
With clmX
.Text = AdoTable.Fields(I).Name
End With
Next
Dim itmX As ListItem
AdoTable.MoveFirst
Do While Not AdoTable.EOF
Set itmX = ListView1.ListItems.Add()
With itmX
If IsNull(AdoTable.Fields(0).Value) Then
.Text = "NULL"
Else
.Text = AdoTable.Fields(0).Value
End If
End With
For I = 1 To AdoTable.Fields.Count - 1
If IsNull(AdoTable.Fields(I).Value) Then
itmX.SubItems(I) = "NULL"
Else
itmX.SubItems(I) 
= AdoTable.Fields(I).Value
End If
Next
AdoTable.MoveNext
Loop
ListView1.View = lvwReport
AdoTable.Close
Set Adotable=Nothing
AdoDatabase.Close
Set AdoDataBase=Nothing
Exit Sub
errorhandle:
RaiseEvent Errordatabase
End Sub

当对数据库的操作发生错误后,除了不能正常显示以外,还应通知宿主程序用户。可以通过创建一个叫做Errordatabase的事件实现上述功能。要创建这个事件,把下述代码添加到UserControl对象的GeneralDeclarations段中。

Public Event Errordatabase()

  此事件的工作像其他控件的事件一样。使用控件的用户可以将代码放到这个事件中,用户要做的唯一的事情就是用RaiseEvent方法激发此事件。

(7)编译控件部件(.ocx 文件)。

  现在已经完成了DataListView控件的创建工作,为了在DataLV工程外也可以使用该控件,只需将DataLV工程编译.ocx控件部件即可。

  在【工程组】窗口单击【DataLV】以选择该工程,在【文件】菜单上单击【生成DataLV.ocx】,在【生成工程】对话框中选择控件存放的目录后, 单击【确定】即可创建.ocx 文件。

  一旦生成了.ocx文件的控件,就可以象使用其它控件一样来随心所欲地使用它了。

 4)结束语

  ActiveX技术可以灵活、高效的实现可交互、重入、重用、完全分布式、与语言无关的各种应用。随着ActiveX技术的发展,ActiveX控件在应用程序中的作用将会显得越来越重要,那么创建一个功能完善、具有自己特色的ActiveX控件就非常具有现实意义。只要掌握了创建ActiveX控件的基本方法,就不难创建自定制的可在各种应用领域使用的ActiveX控件。

  但是,ActiveX技术也有一些明显缺点,ActiveX技术依赖于Windows平台,对广泛应用的UNIX平台目前仍不兼容,另外 ActiveX在许多方面的性能还较弱,ActiveX技术仍需要不断完善和发展。 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -