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 = <= (不等于)
val(文本字符串)函数:把文本字符串格式化成数值
val(“123”) 就是数值123
val(“123aaa”) 就是数值123,忽略字母
If Val(Label2.Caption) > 3 Then Print “八大于三”If Val(Label2.Caption) > 5 ThenPrint “八大于五”
End IfIf Val(Label2.Caption) =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 '声明变量ifor 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,比较11n(j+1) thendim t As Integert=n(j)n(j)=n(j+1)n(j+1)=tend ifnext j
‘每一趟比较之后会出现一个最大值放在数组的最后面
‘因此,下一趟的比较不再需要与最后的数值去比较m=m-1
next i’输出排序后的数组n
s=””
for i=0 to length-1 step 1s=s & n(i) & ” ”
next iprint “排序后数据” & 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 IntegerDim max as IntegerDim min as Integermax=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))val(text1(j).text) thenmindex=j’m=val(text1(j).text)end ifnext jDim 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) = 0 ThenList1.AddItem Val(Text1.Text)
End IfLabel3.Caption = “”
Label5.Caption = “”
Label7.Caption = “”
Dim i%For i = 0 To List1.ListCount – 1 Step 1Select Case Val(List1.List(i))Case 90 To 100Label3.Caption = Val(Label3.Caption) + 1Case 60 To 89Label5.Caption = Val(Label5.Caption) + 1Case 0 To 59Label7.Caption = Val(Label7.Caption) + 1End Select
Next i
select case中的条件表达式如何写?
1、使用to关键字,两边的数值范围是包含的
2、使用is关键字,必须要搭配> = = 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=11print ii=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 #1Print #1, Text1.Text Close #1 覆盖写入 Open App.Path & "/1.txt" For Output As #1Print #1, Text1.Text Close #1 读取文件 只读取一行 List1.Clear Open App.Path & "/1.txt" For Input As #1Dim t$Line Input #1,tList1.AddItem t Close #1 读取整个文件 List1.Clear Open App.Path & "/1.txt" For Input As #1 Do Until EOF(1)Dim t$Line Input #1, tList1.AddItem t Loop Close #1 补充内容 clear方法用来清空 ListBox清空 List1.clear 累加与累乘案例分析 累:积累 加:加法 乘:乘法 例题:输入一个值xxx,1≤x≤1001≤x≤1001≤x≤100之间的整数 求ex=1+x1!+x22!+x33!+⋯+xxx!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、根据输入值xxx来决定个数,有多少个就有多少次循环 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 1Text1.Text = Text1.Text & i & "," Next iEnd Sub 2、do until…loop Private Sub Command2_Click() Dim i As Integer Do Until i = 100i = i + 1Text1.Text = Text1.Text & i & "," LoopEnd Sub 3、递归方式 原理:在一个function/sub中,自己调用自己 注意点:递归算法中必须有退出自身调用自身的循环条件 Dim a As Integer 'a全局变量 Dim a%Private Sub Command3_Click() If a < 100 Thena = a + 1Text1.Text = Text1.Text & a & ","Call Command3_Click End IfEnd 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 ObjectSet 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信息框+消息内容,图标,消息框标题