使用静态变量
放置控件: Form1:Label1,Command1
属性设置: cLabel1.Autosize= true
代码:
Private Sub Command1_Click()
Static stflag As Boolean '使用静态变量来保存变量值
If stflag = False Then
Label1.Font.Size = 14
stflag = True
Else
Label1.Font.Size = 9
stflag = False
End If
End Sub
创建对象
放置控件: Form1:Command1,text1
代码:
Private Sub Command1_Click()
Dim t1 As TextBox
Set t1 = Form1.Text1
If t1.Text = 0 Then
t1.BackColor = 0
t1.ForeColor = 255
End If
End Sub
运行时,只要在Text1中写入0,点击Command1,Text1框就变色了。
如不用t1对象,则程序中t1.BackColor要写成form1.text1.BackColor,比较麻烦。
自定义方法和属性
放置控件: Form1:Command1,text1
代码:
Public tsize As Integer '定义属性
Public Sub textlarge() '定义方法
Text1.Width = Text1.Width * 1.1
Text1.Height = Text1.Height * 1.1
Text1.FontSize = Text1.FontSize + tsize
End Sub
Private Sub Command1_Click()
Form1.tsize = 4
Form1.textlarge
End Sub
遍历控件集合
放置控件: Form1:Label1,Command1,text1,list1
代码:
Private Sub Form_Load()
Dim myc1 As Control
For Each myc1 In Controls
List1.AddItem myc1.Name
Next myc1
End Sub
集合寻址
放置控件: Form1:Label1,Command1,text1,list1
代码:
Private Sub Command1_Click()
Text1 = Controls(3).Left
'Text1 = Controls("label1").Left
'Text1 = Controls!label1.Left
End Sub
代码换行和并行
变量:
a1 = 2: a2 = 3: a3 = 4 '并行
b1 = a1 + a2 + _ '换行
a3
对于字符串:
s1 = “sadd” & c1 & “qwer” '联接
s1 = “sadd” & c1 & “qwer” & _ '换行
“fjkgjgj06”
打印和显示换行
s1 = ”fjdkkjd” & vbcrlf & “iioknno”
强迫变量声明
Option Explicit
还可以在菜单【工具】‖【选项】(编辑器)中选[要求变量声明],自动在每个模块上加Option Explicit
查找字符串显示长度
Public Function len1(str As String) As Integer ‘公用函数
Dim si, i As Integer
Dim str1 As String
si = 0
For i = 1 To Len(str)
str1 = Mid(str, i, 1)
If Asc(str1) < 0 Then
si = si + 2 ‘汉字长度为2
Else
si = si + 1
End If
Next
len1 = si
End Function
截取字符串定长
Public Function len2(s2 As String, si As Integer) As String
Do While len1(s2) > si
s2 = Mid(s2, 1, Len(s2) - 1)
Loop
len2 = s2
End Function
截取并补齐定长字符串
Public Function len3(s2 As String, si As Integer) As String
If len1(s2) > si Then
Do While len1(s2) > si
s2 = Mid(s2, 1, Len(s2) - 1) ‘长了截断
Loop
Else
Do While len1(s2) < si
s2 = s2 & " " ‘短了用空格补齐
Loop
End If
len3 = s2
End Function
模糊查找
Sub shumlook(ByVal shu2 As String)
Dim shu3 As String
shu3 = Mid(shu3, 1, Len(shu2))
If shu3 = shu2 Then
End if
End Sub
清除字符串的所有空格
Function Trimk(cc0)
Dim i, j, s1
j = Len(cc0)
i = 1
While i < j + 1
s1 = Mid(cc0, i, 1)
'MsgBox "s1=" & s1 & ";"
If s1 = " " Or s1 = "" Then
cc0 = Mid(cc0, 1, i - 1) + Mid(cc0, i + 1, j)
i = i - 1
'MsgBox "cc0=" & cc0
End If
i = i + 1
Wend
Trimk = cc0
End Function
读取当前日期和时间
放置控件: Form1:Text1,Text2,Command1
代码:
Private Sub Command1_Click()
Dim d1 As Date
d1 = Date
Text1 = d1 '显示如00-6-24
d1 = Time
Text2 = d1 '显示如10:30:23
End Sub
输入日期并计算
放置控件: Form1:Text1,Text2,Command1
代码:
Private Sub Command1_Click()
Dim d1 As Date
d1 = Text1
d1 = d1 - 100
Text2 = d1
Text1 = Weekday(d1)
End Sub
运行时先在Text1中输入日期(如00-5-30),再点击Command1,则在Text2中显示输入日期100天前的日期,并在Text1中显示该日期为星期几。
返回年、月、日、时、分、秒的函数为year,month,day,hour,minute,second。
注意Weekday返回1代表星期天,2代表星期一,7代表星期六。
初始化事件和终止事件
当调用一个窗体时,一般首先引发initialize事件,再引发load事件。但只是引用窗体上数据或过程时,可能不引发load事件。只有当调用控件时,才引发load。
当终止窗体时,先引发unload事件,再引发terminate事件。但只用unload form1时,并不能引发terminate事件,这时窗体中的过程和变量仍然可以引用。只有用set form1=nothing才能引发ternimate事件。
不定长数组
先定义数组Dim array1 ( )
使用时再用ReDim ( 3, 9 )
或 ReDim (1 to 3, 1 to 9 )
用FORMAT决定数据格式
1.日期和时间
以系统设置的长日期格式返回当前系统日期。
Print Format(Date, "Long Date") ‘返回2001年10月29日
MyStr = Format(MyTime, "h:m:s") ' 返回 "17:4:23"。
MyStr = Format(MyTime, "hh:mm:ss AMPM") ' 返回 "05:04:23 PM"。
MyStr = Format(MyDate, "dddd, mmm d yyyy") ' 返回 "Wednesday, Jan 27 1993"。
2.数字
MyStr = Format(5459.4, "##,##0.00") ' 返回 "5,459.40"。
MyStr = Format(334.9, "###0.00") ' 返回 "334.90"。
MyStr = Format(0.5, "0.00%") ' 返回 "50.00%"。
简化:如aa = 1235432 / 3
Print Format(aa, "0.000") ‘返回411810.667
整数:Print Format(123, "00000") ‘返回00123
3.字符
小写:MyStr = Format("HELLO", "<") ' 返回 "hello"。
大写:MyStr = Format("This is it", ">") ' 返回 "THIS IS IT"。
如果没有指定格式,则返回原字符串。
MyStr = Format(23) ' 返回 "23"。
记录变量
先在模块(如Module1)中定义:
Type QipuRec
qx As Integer
qy As Integer
qColor As string
End Type
再在Form1中添加:
Dim QiShu(1 To 400) As QipuRec
就可以引用QiShu.qx,QiShu.qy了。
二 常用控件
调用不同的Form
放置控件: Form1:Command1,Command2; Form2:Command1
属性设置: 〖Form1.Command1.Caption〗= 进入Form2
〖Form1.Command2.Caption〗= 退出
〖Form2.Command1.Caption〗= 返回Form1
Form1代码:
Private Sub Command1_Click()
Form2.Show
End Sub
Private Sub Command2_Click()
End
End Sub
Form2代码
Private Sub Command1_Click()
Form2.Hide
Form1.Show
End Sub
用OptionButton单选
放置控件: Form1:Option1,Option2,Option3,Label1
属性设置: 〖Option1.Caption〗=BASIC
〖Option2.Caption〗=PASCAL
〖Option3.Caption〗=C
代码:
Private Sub Option1_Click()
Label1.Caption="BASIC"
End Sub
Private Sub Option2_Click()
Label1.Caption="PASCAL"
End Sub
Private Sub Option3_Click()
Label1.Caption="C"
End Sub
用Check复选
放置控件: Form1:Text1,Check1,Check2
属性设置: 〖Text1.text〗=字体演示
代码:
Private Sub Check1_Click()
If Check1.Value=1 then '选中
Text1.FontSize=14 '字体为14号,大字
Else '取消
Text1.FontSize=9 '字体为9号,普通字
End If
End Sub
Private Sub Check2_Click()
If Check2.Value=1 then
Text1.FontItalic=True '设斜体
Else
Text1.FontItalic=False '恢复正常
End If
End Sub
选择ComboBox表值
放置控件: Form1:Combo1(ComboBox)
代码:
Private Sub Combo1_Click()
s1 = Combo1.Text
Print "您选中的是: ";s1
End Sub
Private Sub Form_Load()
Combo1.AddItem "初中"
Combo1.AddItem "高中"
Combo1.AddItem "大学"
End Sub
ListBox从程序赋值
放置控件: Form1:list1(ListBox),label1
代码:
Private Sub Form_Load()
List1.AddItem "a1" '用AddItem方法赋值
List1.AddItem "a2"
List1.AddItem "a3"
End Sub
Private Sub List1_Click()
Select Case List1.ListIndex 'ListIndex值为0,1,2
Case 0: Label1.Caption = "ok1"
Case 1: Label1.Caption = "ok2"
Case 2: Label1.Caption = "ok3"
End Select
End Sub
使用MsgBox双向选择
放置控件: Form1:Command1
属性设置:〖Command1.Caption〗=Exit
代码:
Private Sub Command1_Click()
myexit = MsgBox("确实想退出吗?", VbOkCancel, "退出")
If myexit = VbOk Then
Unload Me
Else
Debug.Print “放弃退出”
End If
End Sub
用InputBox输入数值
放置控件: Form1:Command1
属性设置:〖Command1.Caption〗=开始
代码:
Private Sub Command1_Click()
Dim string1 As String
Dim int1 As Integer
string1 = InputBox("Input")
int1 = Val(string1)
'可直接用int1 = Val(InputBox("input"))
Print "int1="; int1
End Sub
复杂InputBox输入
Private Sub Command1_Click()
qs = 1.2
qs1 = 1.2
ts1 = "2001-2002年乡及乡以上工业增长" & qs & "%,修改后按‘确定’"
s1 = Val(InputBox(ts1, "计算修改", qs1))
If s1 <> "" And s1 <> "0" Then
MsgBox "2002年乡及乡以上工业用水=" & s1 * 123 & "亿立方米。"
Else
MsgBox "放弃修改。"
End If
End Sub
用Timer作定时器
放置控件: Form1:Text1,Timer1
属性设置: 〖Timer1.Interval〗=1000 '1000ms
代码:
Private Sub Timer1_Timer()
If Text1.Text <> "10:02:00" Then
Text1.Text = Time
Else '时间到
Text1.Text = "OK"
Timer1.Enabled = False '不再显示时间
End If
End Sub
用Timer编制延时程序
放置控件: Form1:Command1,Timer1
属性设置: 〖Timer1.Interval〗=10 '10ms
代码:
Sub delay(ss As Integer) '延时过程
Dim start, check
start = Timer
Do
check = Timer
Loop While check < start + ss * 0.001
End Sub
Private Sub Command1_Click()
Command1.Caption = "test1"
delay (1000)
Command1.Caption = "test2"
delay (2000)
Unload Me '退出
End Sub
使用File控件
Private Sub Form_Load()
File1.Pattern = “*.txt”
File1.Path = “C:\fxfx\kfb”
End Sub
如果使用目录列表控件Dir1,则可以用
File1.Path = Dir1
接可以联动使用。
使用COMMONDIALOG控件
在部件的控件中打开Microsoft Common Dialog Control 6.0 (SP),再添加CommonDialog1、Command1和Text1控件。运行时打开文件对话框,并将选中的文件显示在文本框中。
Private Sub Command1_Click()
On Error GoTo errhandler
CommonDialog1.Filter = "All Files(*.*)|*.*|Text Files(*.txt)|*.txt"
CommonDialog1.FilterIndex = 1 ‘缺省为All Files
CommonDialog1.ShowOpen
Text1 = CommonDialog1.FileName
Exit Sub
errhandler:
Exit Sub
End Sub
CommonDialog控件还可以显示颜色对话框(CommonDialog1.showcolor),字体对话框(CommonDialog1.showfont),打印对话框(CommonDialog1.printer),显示帮助对话框(用CommonDialog1.HelpFile=”C:\Windows\Cadio.hlp”设置,用CommonDialog1.ShowHelp调用)。
取消窗体的按钮组
Form1.ControlBox = False
使用Microsoft Flex Grid 6.0控件绑定数据库
直接添加后设置即可;
运行时动态改变控件数组
先在FORM中添加一个COMBO控件,再复制一个成为控件数组,把COMBO1(1)删除,再把COMBO1(0)移到左上角,添加一个COMMAND在右边,编码如下:
Private Sub Command1_Click()
Unload Combo1(5) ‘去掉一个控件
End Sub
Private Sub Form_Load()
c1y = 600
For i = 1 To 5 ‘增加一组控件
Load Combo1(i)
Combo1(i).Top = c1y
Combo1(i).Left = 100
c1y = c1y + 500
Combo1(i).Visible = True
Next
End Sub
StatusBar使用
在部件的控件中打开Microsoft Common Dialog Control 6.0 (SP),再添加Statusbar控件。右击添加窗格,并调整宽度。
添加文字时程序为:
StatusBar1.Panels(1).text = "比例 1 : " & Format$(sbScaleBar1.RFScale, "###,###,###,###,###")
VbModal调用方式
采用VbModal方式调用FORM,可以在其运行完成后在执行下一语句,如:
frmTip.Show vbModal
MsgBox TipType
如果在frmTip中设定TipType=100,则可以显示出这个值来。
ProgressBar的使用
在部件的控件中打开Microsoft Windows Common Control 6.0,再添加ProgressBar控件。
编程时,要先设ProgressBar1.Max(一般为最大循环数加1)和ProgressBar1.Min(一般为0),再在循环中加上一个和循环数同步的变量,如si,再用
ProgressBar1.Value = si
就可以实现进程条的结果了。
在FOR循环中的例子为:
Private Sub Command1_Click()
Dim i As Long
Dim j As Long
Dim si As Long
si = 0
ProgressBar1.Max = 10001
ProgressBar1.Min = 0
For i = 0 To 10000
For j = 0 To 1000
a = "sdf"
Next j
si = si + 1
ProgressBar1.Value = si
Next i
MsgBox "end"
End Sub
在数据库操作中的例子为:
ProgressBar1.Max = ri + 1 ‘ri为全部记录数;
ProgressBar1.Min = 0
Rst2.MoveFirst
While Not Rst2.EOF
……
rj = rj + 1
ProgressBar1.Value = rj
Wend
三 控件编程基本方法
控件输入位置和聚焦
放置控件: Form1:Text1,Command1
代码:
Private Sub Command1_Click()
Text1.SelStart = 3 '光标在第3个位置
Text1.SetFocus '使焦点回到Text1
End Sub
使用容器控件
容器控件有:Frame,PictureBox和ToolBar。
使用容器控件包容其它控件的方法有:
1.先产生容器控件,在其上画其它控件;
2.把已有控件剪贴到容器控件上;
3.用程序 Command1.Container = Frame1
用一键来回设置
放置控件: Form1:Command1,List1
代码:
Private Sub Command1_Click()
If Bzl then
List1.Visible = True
Command1.Cption = “Exit”
Bzl = false
Else
List1.Visible = False
Command1.Caption = “Display”
Bzl = True
End If
End Sub
Private Sub Form_Load()
Bzl = Ture
List1.Visiblae = False
Command1.Caption = “Display”
End Sub
列表控件的选择属性
以List1 的属性为例,列表类控件如List,Combo,File,Dir等均可使用:
1.选中第I项 List1.Selected(i) (True)
2.返回第I项内容 List1.List(i)
3.返回列表总项数 List1.ListCount
4.返回最近一次点击位置 List1.ListIndex
注意:I均从零开始。
列表控件的全选
For i = 0 To File1.ListCount - 1
File1.Selected(i) = True
Next
列表控件的部份选择
Dim fscount, i, j
Dim fs1(100) As String
j = 0
For i = 0 To File1.ListCount - 1
If File1.Selected(i) Then
fs1(j) = File1.List(i)
j = j + 1
End If
Next
fscount = j
使用TreeView控件产生目录
在【部件】中选择“Microsoft Windows Common Control 6.0(SP3)”,就可以打开一组控件,有Tabstrip、Toolbar、Statusbar、Progressbar、Treeview、Listview、Imagelist、Slider、Imagecombo。
把Treeview1和Imagelist1加入窗体;
右击Imagelist1,打开属性页,添加图形;
右击Treeview1,打开属性页,在【图像列表】中选择Imagelist1,还可以改变自目录的缩进;
改变Treeview1属性Linestyle为1;
添加代码:
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
Select Case Node.Key
Case "fx1"
Hyperlink.NavigateTo ("http://b4x5d1/faexcise/fa1/default1.asp")
Case "fx2"
Hyperlink.NavigateTo ("http://b4x5d1/faexcise/fa1/create1.asp")
End Select
End Sub
Private Sub UserDocument_Initialize()
Dim mynode As Node
Set mynode = TreeView1.Nodes.Add(, , "fx", "发行系统", 2)
Set mynode = TreeView1.Nodes.Add(, , "cb", "出版系统", 2)
Set mynode = TreeView1.Nodes.Add(, , "cw", "财务系统", 2)
Set mynode = TreeView1.Nodes.Add(, , "bw", "编务系统", 2)
Set mynode = TreeView1.Nodes.Add(, , "xt", "系统管理", 2)
'二级目录
Set mynode = TreeView1.Nodes.Add("fx", tvwChild, "fx1", "批销", 3)
Set mynode = TreeView1.Nodes.Add("fx", tvwChild, "fx2", "样书", 3)
Set mynode = TreeView1.Nodes.Add("fx", tvwChild, "fx3", "发行管理", 3)
Set mynode = TreeView1.Nodes.Add("fx", tvwChild, "fx4", "查询", 3)
mynode.EnsureVisible
End Sub
四 错误处理
使用监视窗口调试的例子
放置控件: Form1:Command1
属性设置: 〖Command1.Caption〗=开始计算