label控件的精妙应用
Caption属性:通用的标题属性,更改上面的文字
Backcolor属性:控件的背景颜色
Forecolor属性:前景色,其实就是文字的颜色
Font属性:文字的大小、字体、下划线等
Autosize属性:调节控件适应文字的大小
Alignment属性:调节控件内的文字适应控件大小的水平方向的对其属性
Visible属性:可见性,true可见,false不可见
如何通过代码去修改label控件的文字呢?
Labell.Caption=“你很帅,我欣赏你!“
文本要用””包围
=专业叫法:赋值,举例:把右侧的值扔给左侧的变量
Fom窗体常规属性介绍
Fom窗体常规属性介绍
Controlbox窗体的右上角几个按钮的显隐控制
Autoredraw控制不再闪烁的问题
Borderstyle,如果none,会使得窗体周围的边框全部隐藏,包括按钮
Picture属性,可以加入窗体背景图片, gi的图片可以在VB6中显示成透明,其它的图片都不会透明
Startuppostion:精确调节Fom窗体位置调节
如何才能漂亮的控制窗体点击事件?
可以采用label控件的backstvle选择0,这样可以使得labe控件透明
如何让窗体出现在任务栏?
Showintaskbar属性为true,
常用事件
Click单击事件
Dblclick (double click)双击
‘代表注释
MouseMove鼠标移动
MouseDown鼠标按下
MouseUp鼠标弹起
每一个控件对象有共有的事件,但也有自己特有的一些 事件
form对象
KeyDown键盘按下,参数是KeyCode,还能同时判断是否有安装另一个快捷键
KeyPress键盘按下,参数是KeyAscii,特性是比如当输入拼音时,确定某个字之后才执行 Keyup 键盘弹起 Form_Load 窗体加载事件,print前要先show,除非设置autoredraw为true
string变量类型
String类型:字符串类型,用来存储文本
它的内容的表示写在双引号中间””
编程中所有符号都要用英文状态下的半角的符号
声明变量:
Dim txt as string 内存中开辟了一个空间
赋值变量:
Txt=“编程创造城市”
字符串的连接方式,用符号&且这个符号两边都有空格
代码提示快捷键Ctrl+J
Exit sub可以立刻跳出当前sub
Vb中会忽视空行,空行是为了增加代码可读性
使用len函数来获取字符串长度,可以获取字符串中的字符数量
字节Byte
lenB函数用来获取字节数
Boolean布尔类型
这个类型的值只有true(真)或者false(假)
逻辑表达式的结果判断
声明布尔类型变量
Dim flag as Boolean
默认声明后,布尔类型变量默认值为false
逻辑表达式中的布尔型
1>=2 假false 1<2 真true
And和or的应用
And 与
And的应用特点:只要出现一个为假false,结果就为假false
Or 或
Or的应用特点:只要出现一个为真true,结果就为真true
多个and和or运算时,按照优先级为前提,然后我们依次按照从左到右顺序去进行判断
1、数学中的()代表优先运算
2、and和or运算优先级是同级的,同级的情况下我们按照从左到右的顺序
3、当用到or时候,如果or的前面已经是true,那么or的后面不用再运算,结果为true
4、当用到and时候,如果and的前面已经是false,那么and的后面不用再运算,结果为false
Print True Or False And False 输出True
Print (True Or False) And False 输出False
Print True Or (False And False) 输出True
1和3一样,说明两个运算的顺序是一样的,3先算的括号(后面的),显然1先算的后面的(And)。
说明And的优先级是大于Or的。
Timer控件
Timer控件:动画的实现,使得我们程序界面上,静态的东西变成动态
Timer控件重要属性:
1、enabled属性:是否可用
2、interval属性:每隔多少时间执行依次timer事件的代码。时间单位:毫秒。1秒=1000毫秒
Timer1_Timer()时间中具体这个时钟控件要执行什么代码
实现一个随机抽奖动态实现。
时钟控件,在程序启动后是看不到的
if条件判断语句案例实战
1、登录框:QQ登录、手机APP登录、网页登录等等
2、各种判断:判断年龄、判断年月
3、存在多个条件是否:结合and和or
if语法结构
第一种:if 判断条件 then 语句 只有一句时候,可以写在一行上,可以没有end if
第二种:
if条件判断 then
条件为真执行的多行代码
end if
第三种
if条件判断 then
条件为真执行的多行代码
else
条件为假执行的多行代码
end if
条件判断:利用一些比较符号> < = >= <= <>(不等于)
val(文本字符串)函数:把文本字符串格式化成数值
val(“123”) 就是数值123
val(“123aaa”) 就是数值123,忽略字母
If Val(Label2.Caption) > 3 Then Print "八大于三"
If Val(Label2.Caption) > 5 Then
Print "八大于五"
End If
If Val(Label2.Caption) < 0 Then
Print Label2.Caption & "是负数"
Else
Print Label2.Caption & "是非负数"
End If
使用inputbox来代替输入
简略应用
inputbox(文章说明) ——》这个整体代表一个字符串string类型
inputbox(文章说明) 你输入什么就返回一个什么字符串
Private Sub Label1_Click()
Dim pass As String
pass = InputBox("请输入密码")
If pass = "abc" Then Form2.Show
End Sub
Textbox控件助力实现人机交互
Textbox文本框:用于输入
有什么用:
软件的使用者要一些输入到软件中可以实现一个简单的人机交互
比较label控件,文本录入在caption
Textbox文本录入在text属性
Passwordchar属性用来隐藏我们的密码,它是用一个字符来代替我们的密码。
VB中MouseIcon属性设置自定义鼠标图标,MousePointer中设置为99-Custom
简易版QQ登录
多窗口界面用form名称.show 来显示另一个窗体
使用Unload form窗体名称来从内存中释放掉所占空间
模仿登录时候出现的进度条
知识点补充(视频见下次课frame控件):设置多行文本的属性控制
1、MultiLine属性设置为true 意思为可以多行显示
2、ScrolLBars属性设置为both 意思为显示横竖滚动条
command按钮控件
修改按钮上面的文字:Caption属性
按钮是否可用(是否灰掉):Enabled属性
style属性:改为graphical,这样就可以使用picture属性,以及==按钮的背景颜色==
VB按钮如何设置颜色和按钮文字设置颜色?
首先command的style要设为1,否则无法改变,然后在backcolor设置颜色,按钮的字体颜色不能改。如果想改字体颜色,简单点可以用image做按钮。
len(文本字符串)函数:就是用来获取并返回字符串的字符长度
mid()函数:字符串截取函数
mid(字符串,开始截取的位置,截取的长度)
例:
字符串 s=我爱祖国大好河山!
Mid(s,3,2) 结果为:祖国
cls清屏,清除的是print出来的东西
通用中定义变量i Dim i as Integer
Exit sub执行后代码直接跳到end sub,忽视了exit sub之后的代码
Tab键:缩进
案例:控制文字输出
frame控件分组制作色板工具
基本作用:把一些控件集合到一组当中去
borderstyle属性设置是否显示边框
集合到一起的技巧,先把控件剪切,然后,把鼠标放入frame控件中,再右键粘贴!!!
注:如果直接拖动到frame控件中不可以变成一个集合
image图片控件
Picture属性用来加载图片
Stretch图片是否自适应
案例:实现图片的交换
方式1:引入第三方控件暂存
Visible属性:是否显示控件
方式2:使用loadpicture函数来动态加载图片
App.path这个是系统内置工程所在位置路径的系统变量
在通用中声明的变量叫做全局变量,这个变量在这个form窗体中,从内存中释放掉后才会消亡。默认变量为0
Dim n as Integer
shape控件
Shape意思为形状
1、形状有哪些?
默认为矩形
2、形状对应的数值是哪些?范围?0-5
3、它有哪些事件?没有
属性栏中,Shape属性可以改变形状
修改为实心 BackStyle属性 1-Opaque
left和top都是距离窗体的内边框的距离
案例:小球运动实验(小球来回运动)
1、小球向右运动,右侧的边碰到窗体的右侧内边框
小球的右侧=小球的左侧+小球的宽度
窗体的右侧=scalewidth内部宽度
Dim dirct as integer '声明后,默认为0,那么0代表向右,1代表向左
2、小球何时改变方向向右运动?小球的右侧>=scalewidth
3、小球何时改变方向向做运动?小球的左侧<=0
数组活学活用
什么是数组?
变量:可变的量。 integer/long/double string boolean
数组:一组相同类型的变量。
什么是索引?
索引:从0开始的。实际就是表示一组数据中的第几个。
数组的索引最小是几?最大是几?
VB数组中索引的最大的值就是声明数组时候的最大数。有python不同,同时包含第一个和最后一个。最小为0
数组如何声明?
变量的声明:Dim num as integer
数组的声明:Dim num(4) as integer 相当于同时声明了5个integer类型的变量,分别为num(0)、num(1)、num(2)、num(3)和num(4)
数组如何赋值?
数组中的赋值:num(0)=123 num(1)=456
数组如何取值?
获取数组中的值:比如要获取num数组中的第二个值就直接写成num(1)
什么是控件数组?
一组相同类型的数组。
数组越界:超出数组表示的范围
'数组的声明
Dim num(4) as Integer
'数组的赋值
num(0)=123
num(1)=234
num(2)=345
num(3)=456
num(4)=567
'数组值的获取并输出
print num(0)
'数学运算
print num(1)+num(2)
'初始化声明
Dim s=new String(){}
不显示结果 AutoRedraw设置为True或加show
VB里面有一个控件位置锁定(控件不能移动)
解除方法:在窗体设计界面,在窗体的==空白处==右击菜单,看到Lock Controls(锁定控件,有一个蓝色锁图标)菜单项,取消选中即可
for循环的经典运用
for 初始化变量i to 变量i的终值[step 1]
循环条件需要的运行代码
next 变量i
举例:(不定义变量也可以,规范加一下) next i也建议不要省略
step 1建议不要省略
step含义:步长。经过依次循环后使得初始化变量i增加一个相应的值
step可以为正,也可以为负(减法) step 2 加2
Dim i as integer '声明变量i
for i=0 to 10 step 1
'需要执行的代码
next i
不显示结果 AutoRedraw设置为True或加show
这个循环如何运作?内部机理?
初始化变量i的值去跟变量i的终值进行比较
第1次循环 i=0,终值=10,比较0<=10吗?结果为true,运行内部代码
变量i=变量i+1,结果变量i=1
第2次循环 i=1,终值=10,比较1<=10吗?结果为true,运行内部代码
变量i=变量i+1,结果变量i=2
…
第11次循环 i=10,终值=10,比较10<=10吗?结果为true,运行内部代码
变量i=变量i+1,结果变量i=11
第12次循环 i=11,终值=10,比较11<=10吗?结果为false,不执行此次循环内部代码,跳出循环执行next之后的代码
冒泡排序算法精讲
算法主要有:冒泡排序法、选择排序法、折半查找法、快速排序法、穷举法等
Variant数据类型
Variant是一种特殊的数据类型,除了定长String数据及用户自定义类型外,可以包含任何种类的数据。
1、声明
Dim n 如果声明的类型没有明确写明,那么默认表示为Variant类型
或Dim n as variant
2、初始化
N=array(4,7,2,5,77,43,33,88) 一次性对数据进行初始化
Ubound函数 上边界的位置
LBound函数 下边界的位置
求数组长度?
数组n的长度=Ubound(n)-Lbound(n)+1
这种算法的好处:可以动态计算数组的长度
案例:冒泡排序算法
show
Dim n as Variant
n=array(4,7,2,5,77,43,33,88)
Dim length as Integer
length=Ubound(n)-LBound(n)+1
Dim i as Integer
Dim s as String
for i=0 to length-1 step 1
s=s & n(i) & " "
next i
print "输出原数据" & s
'冒泡排序法,从小到大排序
Dim j as Integer
'需要优化冒泡排序法,优化原则就是把已经确定的数值不进行比较
Dim m AS Integer
m=length-2
'第一个for循环表示一共要比较几趟
for i=1 to length-1 step 1
for j=0 to m step 1
'数值交换
if n(j)>n(j+1) then
dim t As Integer
t=n(j)
n(j)=n(j+1)
n(j+1)=t
end if
next j
'每一趟比较之后会出现一个最大值放在数组的最后面
'因此,下一趟的比较不再需要与最后的数值去比较
m=m-1
next i
'输出排序后的数组n
s=""
for i=0 to length-1 step 1
s=s & n(i) & " "
next i
print "排序后数据" & s
数据:4,7,2,5,77,43,33,88
从小到大 人工排序
第一趟:
第1次 4与7比较 结果4,7,2,5,77,43,33,88
第2次 7与2比较 结果4,2,7,5,77,43,33,88
第3次 7与5比较 结果4,2,5,7,77,43,33,88
第4次 7与77比较 结果4,2,5,7,77,43,33,88
第5次 77与43比较 结果4,2,5,7,43,77,33,88
第6次 77与33比较 结果4,2,5,7,43,33,77,88
第7次 77与88比较 结果4,2,5,7,43,33,77,88
所以结论:第一趟比较了7次,筛选出了最大数值,放在最后面
第二趟:
第1次 4与2比较 结果2,4,5,7,43,33,77,88
第2次 4与5比较 结果2,4,5,7,43,33,77,88
第3次 5与7比较 结果2,4,5,7,43,33,77,88
第4次 7与43比较 结果2,4,5,7,43,33,77,88
第5次 43与33比较 结果2,4,5,7,33,43,77,88
第6次 43与77比较 结果2,4,5,7,33,43,77,88
所以结论:第二趟比较了6次,筛选出了第2大数值,放在倒数第二的位置
…
第七趟:出来从小到大的顺序
总结:每一趟挑出最大值放在最后,类似于一次冒出一个泡
总结:
1、掌握冒泡排序法原理
2、优化冒泡排序法的算法,使得运行效率更高
3、动态获取数组的长度
4、数组的初始化,利用Variant数据类型以及array函数
数值分解算法技巧
一个三位整数 567 分解后分别要获取百位数5,十位数6,个位数7
取整符号:\向下取整,相当于int函数
数学除法:/数学中的除以,结果会产生小数
取余符号:mod取余 例: 12 mod 10 结果为2
求百位数的数字=567\100=5
求十位数的数字=(567-5×100)\10=6
求个位数的数字=567-5×100-6×10=7
使用mod求个位数=567 mod 5×100 +6×10 =7
注: *用 ×代替
引入类型符号
Integer 可以用%
String 可以用$
声明的方式 Dim n% Dim s$
使用这种方式声明变量,可以连续一次性声明
例:Dim n1%, n2%, n3%
listbox控件使用-求最值问题解法
1、添加一项 additem
2、移除一项removeitem
3、获取一项list(索引) 索引从0开始
4、获取当前选中的索引 Listindex
5、获取一共有多少项使用 ListCount
MsgBox 信息提示函数,用来提醒我们当前的指定的信息
最基本的使用方法 msgbox “字符串”
案例:录入数据管理
Dim i as Integer
Dim max as Integer
Dim min as Integer
max=val(list1.list(0))
min=val(list1.list(0))
for i=1 to List1.ListCount-1 step 1
'求最大值
if val(list1.list(i))>max then max=val(list1.list(i))
'求最小值
if val(list1.list(i))<min then min=val(list1.list(i))
next i
label3.caption=max
label5.caption=min
求最值的逻辑分析
1、默认声明最大值和最小值都假设为第一项
2、循环遍历数组
3、判断遍历(循环到下一次)到的当前项是否大于默认的最大值,如果是,那就说明当前项为需要找的最大值,一直继续下一次的遍历,继续判断是否是最大值,直到遍历完成,找到需要找的最大值。
如果找最小值,过程是类似的,只不过判断的时候,判断比默认的最小值还小的值是否存在。
4、把找到的最值输出
使用穷举法求素数
穷举法(枚举法)
特点:
1、一般需要确定一个穷举范围
2、每个可能的值去判断是否符合我们需要的条件
穷举法求素数
1、在一个范围内先取一个数
2、将取到的数,对这个数内,从大于1的整数开始到这个数本身,依次穷举
3、把符合条件的拿下(大于等于2且小于这个数本身,这中间无法被整除的数)。如果能被这个范围内的数整除(余数为0),那么它就不是素数。
Dim n as Long
n= val(Text1.text)
Dim i%, j%
for i=2 to n step 1 '穷举所有范围的数
Dim flag as Boolean '默认Boolean值flag为false
flag=True '默认为素数
for j=2 to i-1 step 1 '对每个数进行穷举判断
if i mod j=0 then
flag=false '不是素数
Exit for
end if
next j
if flag then Text2.Text=Text2.Text & i & ","
Next i
选择排序法
选择排序法:在冒泡排序法的基础上的一个升级。它没有在每一趟的比较中将值进行交换,而是一趟只交换一次值。每一趟比较出来,我们筛选出最小(大)值的索引,然后每一趟中,根据这个索引去进行值的交换。
每次对数据的比较过程中,筛选出最小(大)的按个值的索引,然后再交换。
选择排序法的思维逻辑是是什么?
1、遍历所有的数值
2、将每个数值与其它数值进行比较,筛选出最小(大)的值的索引
3、根据筛选出来的索引进行值的交换
4、对所有值采用以上方法进行,直达比完所有的值。
案例:
利用控件数组textbox来达到输入5个值的目的,然后再textbox中直接进行排序。
Dim i%, j%
for i=0 to 3 step 1 '代表有几趟比较,0放在第一个位置,…,3放在第4个位置,最后一个数值自然在最后一个位置
'Dim m%
'm=val(text1(i).text)
Dim mindex%
mindex=i
for j=i+1 to 4 step 1 '所有值与第一个值m比较 j=0就是自己与自己比
if val(text1(mindex).text)>val(text1(j).text) then
mindex=j
'm=val(text1(j).text)
end if
next j
Dim t%
t=val(Text1(i).Text)
Text1(i).Text=val(Text1(mindex).Text)
Text1(mindex).Text=t
next i
1、掌握选择排序法的原理:关键是记录最小值的索引
2、每一轮比较的时候,只能与后面的数值去比较,因为我们已经把最小的数值放在最前面。
3、掌握调试
选择结构select case
select case变量
case 条件表达式1
符合条件表达式1的结果
case 条件表达式2
符合条件表达式2的结果
…
case 条件表达式n
符合条件表达式n的结果
case else '可以没有这项
符合条件表达式else的结果
end select
为什么要引入select case
1、为了程序执行效率问题
当条件较少的时候,使用if语句,只有两个分支
当条件较多的时候,使用select case语句,多个分支
2、为了能够语句结构更为清晰
案例:成绩统计,优秀(>=90)有几个,合格(>=60 & <90)有几个,不合格(<60)有几个?
If Val(Text1.Text) <= 100 And Val(Text1.Text) >= 0 Then
List1.AddItem Val(Text1.Text)
End If
Label3.Caption = ""
Label5.Caption = ""
Label7.Caption = ""
Dim i%
For i = 0 To List1.ListCount - 1 Step 1
Select Case Val(List1.List(i))
Case 90 To 100
Label3.Caption = Val(Label3.Caption) + 1
Case 60 To 89
Label5.Caption = Val(Label5.Caption) + 1
Case 0 To 59
Label7.Caption = Val(Label7.Caption) + 1
End Select
Next i
select case中的条件表达式如何写?
1、使用to关键字,两边的数值范围是包含的
2、使用is关键字,必须要搭配> < >= <> <=符号来写表达式
字符串用is 例:case Is = “abc” msgbox “不要输错”
各种分支语句的课题小结
if 条件1 then
'执行代码
elseif 条件2 then
'执行代码
elseif 条件3 then
'执行代码
…
else
'执行代码
end if
为什么要引入elseif语句
所有的if语句都是必须要进行判断的。而elseif是指一旦满足一个条件之后,将不再判断后面的条件。使得elseif语句的执行效率要高于if语句。
if语句与elseif语句的重要区别?
- if语句条件判断机制:有几个if就判断几次
- elseif语句判断机制:至少判断1次
elect case语句的引入是为了当条件超多的时候使用。
select case 变量
case 条件表达式/值
执行代码
case 条件表达式/值
执行代码
case else
执行代码
end select
执行代码
其中条件表达式/值如何写?
1、直接写值 “a” “bb” 90
2、使用Is关键词,必须要搭配比较符号> < >= <> <=
3、使用to关键词,注意to的两边的值是包含的
4、使用符号逗号(,)可以将多个case的条件进行合并
错误写法:N>10 and n<89 在vb6.0中的case写法是错误的!
5、注意所有的case中表示的值都必须是同一个类型
6、select case语句类似于elseif语句
文件读写
补充循环语句
do until 条件表达式的值类型
符合条件要执行的代码
loop
Do开始做事情 until(直到)满足什么条件就不再执行代码了,loop一次循环结束
Dim i%
i=1
DO until i=11
print i
i=i+1
loop
文件读写语法格式 通用语法格式
Open文件路径 for 打开方式 as #文件号
这里就可以开始读写文件中的内容了。
Close #文件号
在写入的时候,如果原来不存在这个文件名称的话,那么会自动创建。
打开方式
- Append追加写入,在原来的基础上,在最后的位置加入新的东西
- Input读取
- Output写入,覆盖性的写入
写入print文件号,写入内容
读取line input #1,读到一个变量中
注意:文件的读写路径一般要采用app.path就是指程序的相对路径
绝对路径:C:\qikaile\1.txt 往往喜欢用app.path就代表项目工程文件所在的文件夹。
相对路径:
假设文件1的路径是C:\qikaile\1.txt
文件2的路径为C:\qikaile\2.txt
如果当前在C:\qikaile\下面,那么文件1相对于文件2的路径。…/2.txt
EOF函数 理解 end of file文件的末尾
参数就是文件号
文件写入
追加写入
Open App.Path & "/1.txt" For Append As #1
Print #1, Text1.Text
Close #1
覆盖写入
Open App.Path & "/1.txt" For Output As #1
Print #1, Text1.Text
Close #1
读取文件
只读取一行
List1.Clear
Open App.Path & "/1.txt" For Input As #1
Dim t$
Line Input #1,t
List1.AddItem t
Close #1
读取整个文件
List1.Clear
Open App.Path & "/1.txt" For Input As #1
Do Until EOF(1)
Dim t$
Line Input #1, t
List1.AddItem t
Loop
Close #1
补充内容
clear方法用来清空
ListBox清空 List1.clear
累加与累乘案例分析
累:积累 加:加法 乘:乘法
例题:输入一个值 x x x, 1 ≤ x ≤ 100 1≤x≤100 1≤x≤100之间的整数
求 e x = 1 + x 1 ! + x 2 2 ! + x 3 3 ! + ⋯ + x x x ! e^{x}=1+\frac{x}{1 !}+\frac{x^{2}}{2 !}+\frac{x^{3}}{3 !}+\cdots+\frac{x^{x}}{x !} ex=1+1!x+2!x2+3!x3+⋯+x!xx
1、根据输入值 x x x来决定个数,有多少个就有多少次循环
2、使用for循环计算分子部分
3、使用for循环计算分母部分
4、将分子部分/分母部分
5、将每一个计算结果加起来
补充数据类型
浮点型数据:
single单精度浮点型
double双精度浮点型,这是数值类型中表示范围最大的一个数据类型
补充CHR函数
chr函数ascii码转换成对应的字符
Chr(实际的Ascii码值)
补充关键词 Not 取反
Exit sub相当于直接退出sub,不再执行下面的代码
字符文本处理课题总结
VB6.0中可以都认为是字符串文本
从根本上理解字符串包含字符
chr将ascii码值对应的字符/asc将字符转ascii码
mid任意位置截取字符串/left从左边开始截取字符串/right从右边开始截取字符串
len获取字符串中字符的个数,字符长度
ucase将字母转为大写
lcase将字母转为小写
split将字符串按照指定方式分割后返回一个数组
join将数组转为字符串
instr从字符左侧查找指定的字符串是否存在/instrRev从字符右侧查找指定的字符串是否存在
instrB获取字符串的字节数
trim去除字符串两边的空格/ltrim去除字符串左边的空格/rtrim去除字符串右边的空格
str将数值类型转为字符串/cstr任意类型都可以转为字符串
如何才能分多行写呢?
使用下划线符号_
Dim n() as Variant
n=array(11,"22","aa",44,55,66)
print Join(n,"|")
可以自定义 以|为分割符 结果为11|22|aa|44|55|66
Dim s$
s="abcdefg123456"
print UCase(s)
文本文件修改密码知识点补充
1、思维逻辑:实际上是修改其中的某一行
2、按行读取
3、将每读取到的一行文本放置到一个临时变量t中,将每一个t连接到一个总的文本变量s中
4、如果发现读取到的这一行需要修改,那么修改后再连接到s中
5、把s重新覆盖性写入到ini(txt)文本文件中
sub过程与function自定义函数的异同
sub一般用在事件过程中,执行过程中的代码,它没有返回值。
自定义sub的格式
1、没有参数的定义
sub 过程名称()
end sub
2、带参数的定义
sub 过程名称(形式参数1 as 类型1,形式参数2 as 类型2,…)
end sub
调用方法:call 过程名称 或 call过程名称(实际参数1,实际参数2,…)
格式1:没有参数,没有返回值写法
function函数名称()
end function
格式2:带参数,无返回值写法
function函数名称(参数1 as 类型1,参数2 as 类型2,…)
end function
格式3:参数可有可无,有返回值写法
function函数名称(参数1 as 类型1,参数2 as 类型2,…) as 返回值的类型
函数名称=值
end function
- sub与function相同点:在没有返回值之后,调用方式相同
- sub与function不同点:function有返回值,而sub没有
日期时间类型
日期时间类型有哪些关键字?怎么用?
Date日期类型
Time时间
Year年份
Month月份
Day一个月中的哪一天
Hour小时
Minute分钟
Second秒
Weekday返回一周中的第几天
cdate字符串类型转换为日期时间类型
Dateadd日期时间的增加/减少函数
Datediff求两个日期时间之间的差值(求差几秒/分钟/小时…)
日期的声明与赋值方式
Dim d1 as date '声明一个日期时间类型
d1=#2013-01-01 12:13:14# '第一种赋值方式
d1=cdate(“2013-01-01 12:13:14”) '第二种赋值方式
如何求当前日期和时间?
Date & " " & time 相当于 Now ,都表示当前日期时间,
格式为 2013-01-01 12:13:14
interval字符串表达式,是所要加上去的时间间隔的单位
参数说明:
interval参数设定值说明
yyyy年
q季度
m月
y一年的日数
d日
w一周的日数
ww周
h小时
n分钟
s秒
例:
Dim d1 As Date '声明一个日期时间类型
d1 = #1/1/2013 12:13:14 PM# '第一种赋值方式
Dim d2 As Date '声明一个日期时间类型
d2 = CDate("2020-07-31 11:27:56") '第二种赋值方式
Text5.Text = DateDiff("s", d1, d2) '二者时间差秒(s)
除了秒,其他的都有取整
dim s as double
s=datediff("s",now,cdate(label4.caption))
dim d as double
dim h as double
dim n as double
dim f as double
d=s\86400 '求多少天
h=(s-d*86400)\3600 '求多少小时
n=(s-d*86400-h*3600)\60 '求多少分钟
f=s-d*86400-h*3600-n*60 '求多少秒
统计与分离字符串文本中的数字字母等
案例:统计输入框中一共有多少个数字,多少个小写字母,多少个大写字母,其它有多少,并分别显示出来!
根据KeyAscii判断
递归算法
举例:输出1-100之间的所有自然数
1、for循环
Private Sub Command1_Click()
Dim i As Integer
For i = 1 To 100 Step 1
Text1.Text = Text1.Text & i & ","
Next i
End Sub
2、do until…loop
Private Sub Command2_Click()
Dim i As Integer
Do Until i = 100
i = i + 1
Text1.Text = Text1.Text & i & ","
Loop
End Sub
3、递归方式
原理:在一个function/sub中,自己调用自己
注意点:递归算法中必须有退出自身调用自身的循环条件
Dim a As Integer 'a全局变量 Dim a%
Private Sub Command3_Click()
If a < 100 Then
a = a + 1
Text1.Text = Text1.Text & a & ","
Call Command3_Click
End If
End Sub
picturebox控件
picturebox控件作用:用来存放文字、图片、控件等
picturebox控件与image控件区别?
- image控件只能存放图片,picturebox控件可以存放文字、图片、控件等
- 都存放图片时,image控件的图片可以自适应大小,而picturebox控件默认不行
- image控件效率高,功能单一。而picturebox控件恰好相反(功能越强大,效率越低。)
共同点:都使用picture属性来加载图片
如何输入文字到picturebox控件上
控件名称.print 字符串 例:picture1.print text1.text
如何调节picturebox控件中文字大小颜色?
1、使用界面属性的控件属性进行调节
2、与form窗体的设置一样,都可以使用代码进行设置后改变
picture1.forecolor= vbred
RGB颜色设置 例:Picture1.ForeColor = RGB(255, 195, 51)
**案例:**文字每两行变一个颜色
mod取余运算符 5 mod 2 结果为1 2 mod 5 结果为2
单选按钮optionbutton以及多选框checkbox
- 单选框:一组同一类型的选项中只能选择一种。
- 多选框:一组选项中可以选择多项
同一类型的控件,可以使用控件数组
学会使用控件数组的事件,参数 index as integer 表示第几个控件
举例使用:
text1.fontname=option1(index).caption 字体改变
如何解决单选框option两组数据却只能显示一个的问题?
使用frame控件解决
option的value属性true代表选中,false代表没选中
checkbox的value属性 0-代表没选中 1-代表选中 2-代表选中且不能修改
combobox下拉框
下拉框:可以存什么? 存省市 存男女性别
如何输入到下拉框?
使用list属性
Ctrl+enter可以连续输入各个项
backspace返回键可以去掉上一项
默认值:在text属性中
既可以选择,也可以自己输入,最后通过combo的text属性获取当前值
例:combo1.text
如何使其只能选择下拉框内容,不能自己输入?
style属性 2
0-代表:既可以输入,也可以自己选择
1-代表:只能输入,没有下拉
2-代表:只能选择(下拉)
sort属性:将list中的内容自动通过拼音首字母去排序
使用代码动态添加:Additem方式可以动态的添加
案例:
1、性别
2、城市输入
如何使用滚动条
滚动条分类:横向滚动条(Hscroll)和纵向滚动条(Vscroll)
min属性滚动条的最小值设置
max属性滚动条的最大值设置
value值代表滚动条当前值
label3.fontsize=HScroll1.value
scroll事件:当我们鼠标点拉滚动条的时候触发
change事件:当滚动条的值发生变化时候执行
案例:
动态添加控件数组
同一个类型控件的一组控件,这组控件的名称相同,但是index索引不同
可以随着数据的变化,动态增加或减少相应的控件数量,使软件的使用扩展性得到大幅度提升。
使用关键字load来动态添加控件数组
unload移除控件数组
案例:模拟超市储物柜的数量
label控件如何改变为控件数组?
将属性栏中的index改为从0开始的索引数字
默认导入的新控件被隐藏。label.visible=true
文本转语音
语音原理与实现?
使用文字转语音,术语上TTS,实际是利用微软windows系统开发的一个插件,调用这个插件的功能。
案例:开发语音闹钟
- 参数1:输入文本
- 参数2:定时
语音如何创建?
'语音设置
Dim o As Object
Set o = CreateObject("sapi.spvoice") '返回实例对象,相当于一个人,可以讲话了
o.speak (Text1.Text)
为什么是调用sapi.spvoice?
是一个COM对象
COM对象有哪些?使用注册表可以查看,运行输入regedit
计算机\HKEY_CLASSES_ROOT\SAPI.SpVoice
这个系统函数用来创建COM对象实例,创建的对象我们需要使用Set关键字来设置,创建出来的实例对象默认不会被回收。
使用New关键字创建出来的对象,使用完成后会被系统自动回收
toolbar控件与imagelist控件
案例:制作自己的记事本
toolbar控件主要用于工具条的功能项
imagelist控件主要用来提供一组图片,在这里,我们为toolbar控件提供图片
需要导入组件Microsoft Windows Common Controls 6.0 (SP6)
开发自己的打字游戏
案例:
1、练习键盘
2、目标:让文字从界面上方飘下来,按下键盘就可以打中相应字母,重新再生成一个新的字母。
游戏分析:
1、文字飘下来:时钟控件
2、多个文字飘下来,简单的方法就是拖入3个label控件即可,如果多个的话,可以采用控件数组形式,load关键字动态添加
3、通过键盘的按键事件来监控键盘
4、得分:打中一个的一分
label 云生博客
shell “explorer https://www.qikaile.online”
总结:
1、掌握时钟控件的使用
2、掌握动态效果的本质是改变left、top
3、掌握键盘事件
4、判断条件的使用,大小写字母转换
form1.windowstate=1
QQ登录界面动画开发 progressbar控件使用
vb中的动画实现思路
多张图片的快速替换来实现 采用timer时钟控件去使用制作动画
动画的本质:其实就是多帧图片的播放
MsgBox “QQ号码或密码错误!”, vbCritical, “提醒”
MsgBox信息框+消息内容,图标,消息框标题
form1.windowstate=1