VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - VB技巧汇编 (一)
发表评论(0)作者:不详, 平台:VB6.0+Win98, 阅读:10714, 日期:2001-12-21
VB技巧汇编 (一)

在Access 2000中用ADO



要在Access 2000中正确使用ADO你必须在VB工程中添加正确的引用。

打开一个新工程
在工程菜单中选择引用
在弹出来的对话框中选择Microsoft ActiveX Data Objects 2.1 Library.
接着你还必须选中Microsoft ADO Ext. 2.1 for DDL and Security.
最后选中Microsoft Jet and Replication Objects 2.1 Library.
单击“确定”
做完上述的步骤之后,你就可以用ADODC控件去访问Access 2000数据库了。
--------------------------------------------------------------------------------
编写Connect Strings

相信大家都有这样的体验,那就是用ADO时,比较麻烦的一件事就是书写其Connect String。这儿向你提供一个比较简单的方法。

打开工程菜单,选择“添中数据环境”命令
右键单击Connection1对象,在弹出的菜单中选择“属性”
选择你要用到的Data Provider,在本例中假设为 "Microsoft Jet 3.51 OLE DB Provider." 单击下一步
在连接框中输入数据库的文件名
点击“测试连接”检查连接是否成功。
单击确定
回来看看Connection1对象的ConnectionSource属性,这里有你将用到的,看上去象下面这个样子:
Provider=Microsoft.Jet.OLEDB.3.51; Persist Security Info=False;
Data Source=C:DataFilesmy_data.mdb


将上面的代码剪下来粘到你的程序代码中然后将DataEnvironment对象删掉


--------------------------------------------------------------------------------

控件用法
关闭图片预览


在用Web Browser控件时,如果你想让该控件不显示图片,你必须修改注册表,位置如下:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet Explorer
AdvancedOptionsMULTIMEDIAPICTS
须注意的是,如果关掉了图片显示,你的浏览器也不会显示图片了。
--------------------------------------------------------------------------------
升级控件

如果你用新版本的VB去打开旧版本的VB工程文件,有时会出现控件加载错误,这种情况下,VB会用PictureBox去代替这些无法加载的控件,因此你可以删掉这些PictureBox用新的控件来代替,从而解决问题。但是,如果无法加载的控件有很多的话,这样做就比较麻烦了。

还有一个解决之道就是用一个文本编辑器,比如说写字本,来打开工程文件,然后改变那些有问题的控件的版本。如果程序没有使用到那些已不再提供支持的功能的话,这样做一般来讲是没有问题的。


--------------------------------------------------------------------------------
更快的FlexGrids

在刷新速度上,老版本的MSFlexgrid比新的MSHFlexgrid要快得多,因此如果你不需要MSHFlexgrid的hierarchical属性就还是用MSFlexgrid吧。

笔者曾用新的JSHFlexgrid同一个SQL数据库相连以显示查询结果,整个过程花了45秒钟;而用MSFlexgrid只需15秒。微软在搞什么鬼?!

[还有一个有趣的现象,就是在填充数据前将MSFlexgrid的Visible属性设为False,填完数据后再改为True,可以提高程序运行的速度。]



--------------------------------------------------------------------------------

禁用窗体上所有控件

Dim i As Integer
For i = 0 To Form1.Controls.Count - 1
Form1.Controls(i).Enabled = False
Next i

另一种方法是:

Dim ctrTemp As Control
For Each ctrTemp In Me.Controls
ctrTemp.Enabled = False
Next


--------------------------------------------------------------------------------

在状态栏中显示图片


鼠标右键单击Status Bar控件并选择属性。单击窗格标签,插入一个新窗格。在图片区,单击“浏览”按钮选择你想显示的图片。


--------------------------------------------------------------------------------
在WebBrower控件中显示空白页面

Private Sub Form_Load()
wbrMainBrowser.Navigate "about:blank"
End Sub


--------------------------------------------------------------------------------
自动选取文本

Private Sub Text1_GotFocus()
SendKeys "{home}+{end}"
End Sub
利用文本框的SelStart和SelLength属性也可达到同样的目的:
Private Sub Text1_GotFocus()
Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
End Sub

--------------------------------------------------------------------------------
让光标停在文本框的结尾

Text1.SelStart = Len(Text1.Text)

--------------------------------------------------------------------------------
把回车键变成TAB键

Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
SendKeys "{TAB}"
KeyAscii = 0
End If
End Sub

--------------------------------------------------------------------------------
处理数字

开方


root_value = number ^ (1 / root)
例如x的三次方根为:
root_value = X ^ (1 / 3)
启动和结束
显示程序版本

在窗体的Load事件中加入下面的代码:
Me.Caption = Me.Caption & _
App.Major & "." & _
App.Minor & "." & _
App.Revision
用相似的方法,可以把程序的版本号显示在Splash窗体上




--------------------------------------------------------------------------------
关于程序控制的几点建议

最后每次从一个模块启动程序启动程序的代码放在"Sub Main()"中。
关闭程序也最用在模块中的子程序,在子程序中放入下面的代码:

Dim frm as Form

注释: 在窗体集合中循环
注释: 从内存中卸载所有的窗体
For Each frm In Forms
frm.Hide 注释: 隐藏窗体 Unload frm 注释: 卸载窗体
Set frm = Nothing 注释: 从内存中删除窗体
Next

卸载窗体时会引发下面的事件:
Form_QueryUnload
Form_Unload
Terminate
你应将大部分的控制放在Form_QueryUnload事件中

Private Sub Form_QueryUnload(Cancel As Integer,UnloadMode As Integer)

注释: ---------------------------------------------------
注释: Cancel的默认值为零,如将其设为其它数值,则不会卸载窗体。
注释: ---------------------------------------------------
注释: 下面是对unloadmode的说明 注释: ---------------------------------------------------

Select Case UnloadMode
Case 0:
注释:窗体右上角的X号关闭窗体 Case 1:
注释: 程序代码关闭窗体,例如Unload Me
Case 2:
注释: 关闭Windows关闭窗体

Case 3:
注释: 在任务管理器中关闭窗体 Case 4:
注释: MDI窗体被卸载时关闭窗体

End Select
End Sub




--------------------------------------------------------------------------------

把窗体卸载干净
VB的End语句并不总是将在程序中打开的东西卸载得一干二净。例如你在程序中打开了一个文件,而没有用Close语句关闭这个文件,这时你通过程序中的End语句结束了程序,Windows就会认为你打开的文件正在被一个程序所使用,导致你在资源管理器中无法删除该文件。在有些情况下,如果你只用End语句来结束程序,会导致一些非常严重的后果,例如Windows会发出错误的信息,告诉你C盘损坏等等。

因此最好是自己编写一个关闭子程序:
Public Sub Shutdown(Optional ByVal Force As Boolean = False)
Dim I As Long

On Error Resume Next

For I = Forms.Count - 1 to 0 Step -1
Unload Forms(I) 注释: Triggers QueryUnload and Form_Unload

注释: If we aren注释:t in Force mode and the
注释: unload failed, stop the shutdown.
If Not Force Then
If Forms.Count > I then
Exit Sub
End If
End If
Next I

注释: If we are in Force mode OR all
注释: forms unloaded, close all files.
If Force Or (Forms.Count = 0) Then Close

注释: If we are in Force mode AND all
注释: forms not unloaded, end.
If Force Or (Forms.Count > 0) Then End
End Sub

--------------------------------------------------------------------------------
执行一次初始化
在一个子程序中使用一个静态变量来执行
Private Sub GetValue()
Static initialized As Boolean

If Not initialized Then
注释: Perform one-time initialization.
:
initialized = True
End If

注释: Do other stuff.
:
End Sub
输入/输出
左对齐或右对齐
利用Format函数对文本设置对齐方式。
Format$(123, "@@@@@@") gives " 123"
Format$(123, "!@@@@@@") gives "123 "

--------------------------------------------------------------------------------
格式化数字
利用Format$(value, "0.00")可将数字设为以两位小数的形式输出,加上上一个设置对齐方式的方法,可实现下面的效果:
Print Format$(Format$(123.45, "0.00"), "@@@@@@@@")
Print Format$(Format$(3.4, "0.00"), "@@@@@@@@")
Print Format$(Format$(12345.6, "0.00"), "@@@@@@@@")
结果如下:
123.45
3.40
12345.60

--------------------------------------------------------------------------------
快速读写数组

Dim arr(1 To 100000) As Long
Dim fnum As Integer

fnum = FreeFile
Open "C:Tempxxx.dat" For Binary As fnum
Put #fnum, , arr
Close fnum