Visual Basic学习笔记##对口升学##可用,持续更新~~

Visual Basic第一章

visual basic简介
发展史
  • 1991年微软推出1.0,之后几年退出2.0~5.0
  • 1998年推出了6.0,加入了数据库管理,网络编程模块
  • 2001年推出了跨版本升级.net
编程语言排行
b923b3de81882d8950f1d49339b647b5.png
版本分类
  1. 学习版(包含所有内部控件,网络,选项卡和数据绑定控件)
  2. 专业版(在学习版的基础上加入了activeX控件,ISS应用程序设计器,集成了可视化数据工具和数据环境,Active数据对象和DHTML页设计器)
  3. 企业版(在专业版的基础上加入了Back Office工具,例如SQL Server****、Microsoft Transaction ServerIISVisual SourceSafe等。
语言特点
  1. 可视化编程(类似于scratch模块拖动编程)
  2. 事件驱动机制(不同组件有相对应的事件触发机制)
  3. 面向对象的程序设计语言(每个控件属性自我封装)
  4. 支持多数据库访问机制
如何学好vb
  1. 兴趣和坚持
  2. 实践出真知
  3. 恰当的提问
vb启动
  1. 通过开始菜单启动外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  2. 快捷方式打开
vb退出
  1. 点击关闭按钮
  2. 点击文件---->退出
  3. 快捷键Alt+Q
工具介绍
  1. 工具栏image-20230825113806976
  2. 属性窗口image-20230825114458253
管理工程
  1. 新建保存工程
    1. 新建工程外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
    2. 保存工程外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
    3. 新建窗体外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  2. 生成可执行文件外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
第一个应用程序的开发
开发步骤
  1. 创建应用程序界面

  2. 设置控件属性

  3. 编写代码

  4. 调试运行程序

    image-20230825164556423
工具模式
  1. 开发模式:修改控件,属性及代码
  2. 运行模式:只能看不能修改
  3. 中断模式:检查,调试,重置,单步执行或继续执行程序
vb工程组成
  1. 跟踪所有部件的工程文件(.vbp)

  2. 窗体文件(.frm)

  3. 窗体所对应的二进制文件(.frx)

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Visual Basic第二章

类和对象
名词解释类比
模板电话机图纸
对象根据模板生成的实际存在的个体电话机
属性个体的各项参数重量,价格…
方法所能执行的功能打电话,接电话
事件触发的条件电话铃响
属性值的修改
  1. 静态修改:通过程序窗口设置的方式进行修改image-20230919222641108

  2. 动态修改:使用代码的形式对控件的属性进行修改

    Text1.text = "Hello world"       '将Text1文本框中的内容修改为Hello World'
    
事件和方法
  1. 事件(触发条件):不同控件拥有不同的触发机制,例如按钮可以单机双击,文本框可以监听内容修改获取焦点等事件。
  2. 方法:事件出发后要执行的操作,例如单击按钮(事件)后文本框内容修改(方法)
窗体
  1. 组成

    1. 标题栏:标题内容,最小化,最大化,关闭按钮

    2. 窗体主体:自定义各种控件

      image-20230919223447739
  2. 窗体常见属性

    属性名说明
    caption修改窗体标题
    name窗体名称(编写代码查找窗体使用)
    MaxButton最大化按钮
    ControlBox系统菜单栏
    BackColor背景颜色
    BorderStyle窗体边框样式
    Height窗体高度
  3. 窗体常用事件

    事件触发时机
    Click鼠标单击
    DbClick鼠标双击
    Load窗体打开后触发
    Unload窗体关闭时触发
控件与焦点
  1. 焦点:控件被选中的状态image-20230919225224991
  2. 获得焦点的方式
    1. 通过Tab键切换
    2. 通过鼠标选择
    3. 通过代码设置(控件名.setFocus)
控件的绘制
  1. 鼠标单击---->绘制控件(配合Ctrl可以实现重复绘制)
  2. 鼠标双击控件------>在窗体中间自动生成一个默认大小的控件,如果同时添加多个控件会出现控件重叠的情况。
控件大小调整
  1. 选择对应的控件,通过设置属性(height,weight)的方式该表大小
  2. 鼠标拖动周围小点的方式改变控件大小
控件位置调整
  1. 1.使用left,top属性设置控件位置
  2. 使用鼠标拖动改变控件位置
  3. Ctrl+方向键修改控件位置
布局调整
  1. 选中调整的控件,点击格式调整对齐方式。(配合Shift选中所有控件或通过鼠标框选)
  2. 格式中的对齐,统一格式,水平间距,垂直间距调整布局。
控件常用属性
属性名说明
caption标题/显示内容
name控件名称(编码时定位控件使用)
enabled控件是否可用(置灰状态)
visible控件是否可见(隐藏控件)
font设置字体样式
height/width设置控件尺寸
top/left设置控件位置
forecolor设置前景色(窗体中小点的颜色,控件中文字颜色)
backcolor设置背景颜色
标题栏—lable
  1. 常见属性

    属性说明
    alignment设置标题内容在控件中的位置
    left 靠左
    right 靠右
    center 居中
    autosize设置控件尺寸跟随文字内容自动调整
    wordwrap控件宽度固定,高度跟随文字变化子自动调整

    ❤使用wordwrap前autosize属性值必须为true

文本框
  1. 常用属性

    属性说明
    locked锁定文本框内容(光标闪动,文本内容无法编辑)
    enabled设置文本框是否可用
    passwordchar设置文本加密(输入字符为加密显示字符)
    multilint设置文本内容最大32kb
    scrollbars设置文本框滚动条 0:没有(默认值) 1:水平方向滚动条 2:垂直方向滚动条 3:水平垂直都有(只在一行显示,需要回车换行)

    ❤先将multiline设置为true,scrollbars属性才能生效。

  2. 常用事件

    事件说明
    Change文本框内容发生修改时触发
    GotFocus文本框获得焦点时触发
    LostFocus文本框失去焦点时触发
  3. 通过代码使文本框获得焦点

    Text1.SetFocus

  4. 文本框常用方法

    方法说明
    selStart光标此刻所处的位置
    selLength选中字符的长度
    selText选中字符
按钮
  1. 常用属性

    属性说明
    Caption设置按钮显示内容
    Default值为True时,回车键控制按钮点击
    Cancel值为True时,Esc键控制按钮点击
  2. 设置按钮图标

    1. 将Style属性设置为1–Graphical
    2. 设置picture属性选择图片(默认\Common\Graphics\Icons目录下有系统提供的图标)
  3. 按钮增加动态提示

    ToolTipText设置提示内容
  4. 按钮常见事件

    Click鼠标单击
通用模块(重写sendkeys)
Public Sub Sendkeys(text$, Optional wait As Boolean = False)
    Dim WshShell As Object
    Set WshShell = CreateObject("wscript.shell")
    WshShell.Sendkeys text, wait
    Set WshShell = Nothing
End Sub

Visual Basic第三章

模块—vb程序中的容器
  1. 窗口模块:程序有不同多个窗体组成,每个窗体包含不同的控件及代码
  2. 标准模块:程序代码的共享,可以包含全局变量、常量及外部过程
  3. 类模块:创建对象的模板
过程

概念:具有特定功能的代码集合

分类说明
事件过程触发某个事件执行的代码
通用过程所有窗体和控件可共享的代码
代码窗口
代码窗口的使用
  1. 双击控件
  2. 工程资源管理器
  3. 选择控件鼠标右击
代码窗口的查看
  1. 过程查看(单模块查看)image-20230920093106529

  2. 全模块查看(所有控件及通用代码)image-20230920093125277

代码窗口的智能化编辑
  1. 自动语法检查
  2. 自动格式排版
  3. 语法提示
编码规则
  1. 不区分大小写
  2. 同一行可书写多条语句,使用:分割(不提倡)
  3. 每行最多1024个字符,续行符“_”
  4. 数字除了可以用默认的十进制表示外,还可以用其他进制: &H9A、 &O76
  5. 代码要有缩进
注释

​ 概念:有利于程序的阅读,维护和调试,不影响代码运行,使用单引号

  1. 在代码尾部添加,有续行符的不可以
  2. 添加多行注释时可使用工具栏下的注释块功能
关键字

visual basic中保留的字母作为程序中固有含义的标识符,不能被重新定义。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

标识符
  1. 定义:标识符是用户在编程时定义的名称,包括常量,变量,过程,函数和类等,在实际操作这些变量的时候我们需要给每个变量起一个名字以表示区分。这就像在日常生活中每一个人,每一个商店都会有一个名字一样。

  2. 命名规则:

    1. 由大小写英文,数字,下划线(_)组成,且以字母开头(可使用汉字,不推荐)
    2. 长度不能超过255
    3. 不能使用关键字,不能与当前模块中已有方法和属性名重复
    4. VB不区分变量名的大小写,一般变量名首字母用大写,其余用小写字母表示;常量全部用大写字母
  3. 示例

    1. Const PI = 3.141592653     #PI为常量标识符,代表圆周率
      Dim Name as String         #Name为变量标识符,表示姓名
      
数据类型
image-20230825175013372
数据类型关键字类型符前缀占字节数应用
字节型Bytebyte1存储二进制数据,范围较小,不能存放负数
逻辑型Booleanbln2只有 True 和 False 两种取值,用于逻辑判断
整型Integer%int2保存整数,取值范围小,用于不带小数的数据
长整型Long&Ing4取值范围大于整型,其余同上
单精度型Single!sng4保存浮点实数,运算可能会产生误差
双精度型Double#dbl8取值范围大于单精度型,其余同上
货币型Currency@cur8保存定点实数,主要用于货币计算
日期型Datedtm8保存日期与时间数据
字符型String$str可变保存字符串数据,分为定长与变长两种
对象型Objectobj4存储32位的地址数据,该地址可引用应用程序中的对象
变体型Variantvnt可变可以保存所有系统定义的数据类型,主要是用于未定义变量的默认数据类型,其数据类型的处理完全取决于上下文
常量

在程序运行过程中不变的量,例如圆周率

  1. 直接常量

  2. 符号常量

    Const 常量名 [AS 类型] = 值 | 表达式

    Const PI = 3.14159
    
  3. 系统常量

变量

在程序运行中其存储的值可以改变

命名规则
  1. 必须以字母或汉字开头,由字母、汉字、数 字或下划线组成,长度小于等于255个字符
  2. 不能使用VB中的关键字
  3. VB不区分变量名的大小写,一般变量名首字母用大写,其余用小写字母表示;常量全部用大写字母
非法变量名
  1. 3xy ’ 数字开头
  2. y - z ’ 不允许出现减号
  3. Wang Ping ’ 不允许出现空格
  4. Dim ’ VB.NET的关键字
  5. Cos '标准函数名
声明变量
  1. 显式声明

    Dim 变量名 [As 类型]

    Dim m As Integer 	'定义整型变量m'
    Dim m,n As Integer, x,y As Single  '创建了变体型变量m、x,整型变量n和单精度型变量y 
    

    强制显示声明:**工具→选项→编辑器→ **要求变量声明image-20230922100053325

  2. 隐式声明

    x = "123"		'定义变体型变量x'
    
  3. 类型声明符

    strName$ = "张三"		'定义一个字符型变量strName'
    Dim age%			'定义一个整型变量age'
    
运算符与表达式
  1. 运算符分类
    1. 算数运算符
    2. 字符串运算符
    3. 关系运算符
    4. 逻辑运算符
算数运算符(设ia=3)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

❤注意❤

算数运算符两边应是数值型,若是数字字符(“123”)或逻辑型,则自动转换为数值型后再运算

30-True     '结果为31   True转为数值-1
False + 10 + "4"	'结果为14,False转换为0'
字符串运算符
操作符说明
+1)数值型:则进行算术加运算
2)一个为数字字符,另一个为数值,自动将数 字字符转换为数值后进行算术加
3)一个为非数字字符,另一个为数值型,出错
4)两边必须都为字符型才能进行拼接
&将两边转换为字符串后进行拼接
12 + 12			    '数值型24'
12 + "12"			'数值型24'
"中国" + 12		   '报错'
"123" + "456"		 '字符型123456'
12 & 12				'字符型1212'
12 & "True"			'字符型12True'
关系运算符

也叫比较运算符,双目运算符,结果为布尔型数据。

字符类型数据比较时只比较相同位数的ASCII值

运算符结果
=" ABCDE " = " ABR "False
>" ABCDE " > " ABR "False
>=32>=12True
<23<3False
<=3<=23True
<>" abc" <> "abcde "True

img

逻辑运算符

除Not是单目运算外,其余都是双目运算。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Eqv等价5两个操作数相等时才为真(3>2)Eqv (“a”>“b”)F
Imp蕴涵6第一个操作数为真,第二个操作数为假,结果才为假,其余为真(3>2)Imp(“a”>“b”)F
运算符的优先级

算术运算符 > =字符运算符>比较运算符 > 逻辑运算符

数组

具有相同名字,下标值不同的一组变量称为数组变量,简称数组

数组必须先声明,后使用

数组下标默认从0开始

分类
  1. 静态数组

    数组的维数与下标的范围在声明时确定

    声明:Dim 数组名(下标上界) As 数据类型

    Dim sngCj(45) As Single    '具有46个元素的一维数组'
    Dim intA(3,4) As Integer	'声明一个二维数组,共有20个元素'
    Dim BirthDay(1 To 10) As Date	'声明下标从1到10的数组'
    
  2. 动态数组

    声明数组时不指明下标的大小(省略括号中的下标),当需要使用时,再用ReDim语句重新定义其大小

声明:Dim 数组名() As 数据类型

重新分配:ReDim 数组名(下标数)

Dim intRs() As Integer        
ReDim intRs(12)
intRs(0) = 1
intRs(1) = 2
print intRs(0)		'#   1'
print intRs(1)		'#   2'
'使用Presever源数据得以保留'
ReDim Preseve intRs(6)
print intRs(0)		'#   1'
print intRs(1)		'#   2'
'使用ReDim改变数组大小会使原数组的内容丢失,使用Preserver关键字可保留原数组内容,不能改变源数据类型
ReDim intRs(6)
print intRs(0)		'#   0'
print intRs(1)		'#   0'
二维数组

定义:Dim 数组名(行数,列数) As 数据类型

Dim MyArry(2,4) As Integer
'二维数组元素个数为3*5个,行数下标0~2,列数下标0~4'
修改数组下标起始值
Option base 0|1       '设置下标起始值'
'该语句必须放置在模块所有过程和所有数组声明之前,而且一个模块中只能出现一次'
'LBound(数组名)	返回数组指定维的下标下限'
'UBound(数组名)	返回数组指定维的下标下限'
Dim Lower, Uower    '定义变量显示下标上下界
Dim MyArray(20), TwoArray(3, 4) '声明数组
Dim ZoreArray(0 To 5)   '定义数组下标从0开始
'使用LBound函数查看数组下标下限值'
Lower = LBound(MyArray)        '返回0'
Lower = LBound(TwoArray)        '返回0'
Lower = LBound(ZoreArray)       '返回1'
'使用UBound函数查看数组下标上限值'
Uower = UBound(MyArray)         '返回20'
Uower = UBound(MTwoArray)       '返回4'
Uower = UBound(ZoreArray)       '返回5'
数组的使用

访问:数组名(下标值)

赋值:数组名(下标值) = 表达式|值

'通常数组配合循环联合使用
Private Sub Form_Click()
Dim intA(10) As Integer
Dim i As Integer
For i = 0 To 10
   intA(i) = 1  '对每个数组元素赋初值1
   Print intA(i)    '输出数组元素的值
Next i
End Sub

❤数组的访问不能超过数组下标上界,否则会报数组越界错误

Dim intA(10) As Integer
Print intA(11)  			'访问下标不存在

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

标准(内部)函数
概念

​ 实现某种特定功能或能实现某种运算的代码块,例如计算平均值,求和等操作

分类
  1. 数学函数

    函数名含义示例结果
    Abs(N)取绝对值Abs(-3.5)3.5
    Cos(N)余弦函数Cos(0)1
    Exp(N)返回e的N次幂,e取值约2.7Exp(2.3)10
    Fix(N取整Fix(-3.5)-3
    Log(N)自然对数Log(10)2.3
    Int(N)取小于或等于N的最大整数(向下取整)Int(-3.5-4
    Rnd[(N)]产生随机数Rnd[0,1)之间的数
    Round(N)四舍五入取整Round(3.5)4
    Sin(N)正弦函数Sin(0)0
    Sgn(N)符号函数Sgn(-3.5)-1
    Sqr(N)平方根Sqr(9)3
    Tan(N)正切函数Tan(0)0
  2. 转换函数

    函数名功能示例结果
    Asc©字符转换成ASCII码值Asc(“A”)65
    CDate转换成日期型CDate(“2003/11/13”)2003-11-13
    Chr(N)ASCII码值转换成字符Chr$(65)“A”
    Hex(N)十进制转换成十六进制Hex(100)64
    Lcase©大写字母转为小写字母Lcase$(“ABC”)“abc”
    Oct](N)十进制转换成八进制Oct$(100)“144”
    Str(N)数值转换为字符串
    首位保留一个空格
    Str$(123.45)" 123.45"
    Ucase©小写字母转为大写字母Ucase$(“abc”)“ABC”
    Val©数字字符串转换为数值Val(“123AB”)123
  3. 字符串函数

    函数名功能示例结果
    Right(C,N)取字符串右边n个字符Right(“ABCD”,3)“BCD"
    RTrim©去掉字符串右边空格RTrim(“ABCD”)“ABCD”
    Space(N)产生n个空格的字符串Space(3)“"
    Split(C[,D])将字符串分隔成字符数组。与Join作用相反S=Split(“123,ab”,“,”)S(0)=“123” S(1)=“ab"
    String(N,C)重复首字符nString(3,“ABC”)“AAA”
    StrReverse©将字符串反序StrReverse(“ABCD”)“DCBA”
    InStr([N,]C1,C2[,M])n开始,在C1中找C2InStr(2,“EFABCDEFG”,“EF”)7
    Left(C,N)取字符串左边n个字符Left(“ABCDE”,3)“ABC”
    Len©字符串长度Len(“AB教育”)4
    Trim©去掉字符串两边空格Trim(“ABCD”)“ABCD”
    Mid(C,N1[,N2])取字符子串Mid(“ABCDE”,2,3)“BCD”
    Replace(C,C1,C2)C2替代C1Replace(“ACDABCD”,“CD”,“3”)“A3AB3”
  4. 日期函数

    函数名功能示例结果
    Date[()]返回系统日期Date
    Day(C|N)返回日期代号(1~31)Day(“2003,05,01”)
    Hour(C|N)返回小时(0~24)Hour(#1:12:56PM#)
    Minute(CN)返回分钟(0~59)Minute(#1:12:56PM#)
    Month(CN)返回月份代号(1~12)Month(“2003,05,01”)
    Now返回系统日期和时间Now
    Second(CN)返回秒(0~59)Second(#1:12:56PM#)
    Time[()]返回系统时间Time
    Year(CN)返回年代号(1753~2078)Year(365)

  5. Shell函数

    作用:调取应用程序

    格式:Shell(应用程序.exe|.bat|.com)

    i=Shell( "calc.exe")  	'打开计算器'
    '调用成功返回任务表示ID,失败返回0'
    
输入与输出
数据输入
  1. 语法:InputBox(提示文字,[标题–可不写],[文本框默认内容–可不写])

  2. '示例代码
    Dim msg as String								'定义变量接收键盘输入的值'
    msg = InputBox("请输入要查找的姓名:","输入")		 '键盘输入的值存储到变量中'
    '接受值默认为字符类型
    '输入值要使用变量接受
    
    image-20231007114148563
  3. ❤注意❤

  4. 接受数据为字符串类型,没有输入直接Enter返回空字符串

  5. 每次只能输入一个值,如需输入多个值需要重复执行该函数

  6. 点击取消或者键盘Esc键输入的值作废,返回空串

  7. 提示内容换行显示需要配合系统常量vbCrLf实现image-20231007144613061

image-20231007144632511
数据输出
  1. MsgBox

    1. 语法:MsgBox(提示语,[按钮类型],[消息框标题])

      按钮类型:按钮数目值+图表类型值+默认按钮值+模式值外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    2. Dim status as Integer 			'定义变量'
      status = MsgBox("继续吗?",VbYesNoCancel+VbQuestion,"询问")		'将选择结果赋值给变量'
      status = MsgBox("继续吗?",3+32,"询问")            				'实现效果与上方一直
      
      image-20231007145501802
      按钮名内部常量返回值
      确定VbOk1
      取消VbCancel2
      中止VbAbort3
      重试VbRetry4
      忽略VbIgnore5
      VbYes6
      VbNo7

      3.使用函数直接使用

      MsgBox "继续?", 3 + 32
      
  2. Print

    1. 语法:[object].Print [Spc(n) | Tab(n)] [expression][,|;]

      1. object:输出目标,如立即窗口(Debug),指定窗体,相片框或打印机

      2. expression:输出内容或表达式

      3. Spc(n):输出的空格

      4. Tab(n):输出到指定列

      5. ,|;:,表示前后内容输出的两个标准分区 ;前后内容紧凑输出

    2. 示例代码

      Debug.Print "欢迎使用vb"		'在立即窗口输出'
      Form1.Print "2+3";2+3		   '在指定窗体中以紧凑方式输出'
      Print 							'输出一个空行'
      Print Tab(12),"welcome to vb"	'在窗体12列输出'
      
      image-20231007222501951
  3. 格式输出

    1. 语法:Format [$] (Expression[format])

      1. $:返回值为字符型,省略返回值为变体型

      2. expression:输出表达式

      3. format:格式字符串

        '# 表达一个数字位,决定显示区段的长度
        Print format $ (25634,"########")		'25634'
        Print format $ (25634,"###")			'25634'
        '0 与#相同,多余的位用0补齐
        Print format $ (25634,"00000000")		'00025634'
        Print format $ (25634,"000")			'25634'
        '. 显示小数点,多余的数字按四舍五入处理
        Print format $ (256.345,"##.####")		'256.345'
        Print format $ (256.345,"###.##")		'256.35'
        Print format $ (256.345,"00.0000")		'256.3450'
        Print format $ (256.345,"000.00")		'256.35'
        ', 分位作用,小数点左边开始每3位用一个逗号分开,逗号不要放在头部和靠经小数点
        Print format $ (12345.78,"##,##.#")		'12,345.78'
        Print format $ (256.345,"###,#.#")		'12,345.8'
        '% 字符串尾部加%
        Print format $ (256.345,"00.0000%")		 '25634.5000%'
        '$ 字符串前边加$'
        Print format $ (256.345,"$00.####")		 '$256.345'
        '+ 字符串前加正号'
        '- 字符串前加负号'
        'E+(E-) 用指数形式显示数值'
        
程序流程控制
分类
  1. 顺序结构
  2. 分支结构
  3. 循环结构
顺序结构

各语句按照先后顺序依次执行,从上往下依次执行每行代码。

流程图:image-20231008221720583

示例:

Dim x as Integer         '第一步执行'
x = 20					 '第二步执行'
print x					 '第三步执行'
选择结构1
  1. 单分支语句

    1. 块结构语法:

      If 表达式 Then

      语句块(一条或多条语句)

      End If

    2. 单行结构语法:

      If 表达式 Then 语句

      ❤表达式结果为逻辑值,如果表达式结果为数值类型,表达式值按非零为True,0为False进行判断

      ❤使用单行结构时,语句块中多条语句使用:分隔

    3. 执行流程

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    4. 示例代码

      '小明的考试成绩及格了就奖励一顿大餐
      '块语句结构实现'
      Dim score as double 					    '定义变量存储成绩'
      score = inputBox("请输入本次考试成绩:")		 '将键盘输入的值赋值给变量'
      if score>=60 Then							'判断分数是否及格'
          MsgBox("吃大餐")						  '判断结果为真执行的语句块'
      End If										'结束判断语句'
      
      '行语句结构实现'
      If score>=60 Then MsgBox("吃大餐"):MsgBox("看电影"):Msgbox("电玩城")		
      '多条语句用:分割'		
      

2.双分支结构

  1. 块状结构语法:

    If 表达式 Then

    语句块1

    Else

    语句块2

    End If

  2. 行状结构语法:

If 表达式 Then 语句块1 Else 语句块2

  1. 执行流程:

  2. image-20231009155429447
  3. 示例代码:

    '小明考试成绩及格就奖励一个蛋糕,不及格抄写试卷'
    '块语句结构实现'
    Dim score as double 					    '定义变量存储成绩'
    score = inputBox("请输入本次考试成绩:")		 '将键盘输入的值赋值给变量'
    if score>=60 Then							'判断分数是否及格'
        MsgBox("吃大餐")						  '判断结果为真执行的语句块'
    else
        MsgBox("抄写试卷")						  '判断结果为假执行的语句块'
    End If										'结束判断语句'
    
    '行语句结构实现'
    If score>=60 Then MsgBox("吃大餐") else MsgBox("抄写试卷")
    

3.多分支结构

  1. ​ 语法:

    If 判断条件 Then
    	语句块1
    ElseIf	表达式2 Then
    	语句块2
    ...
    Else
    	语句块n
    End If
    

2.执行流程:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.示例代码:

'小明考试成绩90分以上属于优秀,60~90之间良好,60以下需要努力'
Dim score as double 					    '定义变量存储成绩'
score = inputBox("请输入本次考试成绩:")		 '将键盘输入的值赋值给变量'
if score>=90 Then							'判断分数是否大于90分'
    MsgBox("优秀")						  '判断条件1结果为真时执行的语句'
ElseIf score>=60 and score <90				'判断分数是否位于60~90区间内'
    MsgBox("良好")						  '判断条件2结果为真时执行的语句'
Else
    MsgBox("需要努力")						 '上边条件都不满足执行最后一项'
End If				

4.IIf函数

语法:IIf(表达式,表达式为真执行的语句块,表达式为假执行的语句块)

示例:

IIf(5>3,"True","False")					'结果为真,输出True'
选择结构2

Select Case语句

  1. 语法:

    Select Case 变量或表达式
    	Case 表达式列表1
    		语句块1
        Case 表                                                                                   达式列表2
        	语句块2
        ...
        Case Else
        	语句块n
        	
    *表达式列表与变量或表达式的类型必须相同
    *表达式列表可以是一个固定值(88),也可以是多个值(88,99,66),也可以是范围值(60 to 90)或关系表达式(score>90),或者以上几类组合使用。                                                   
    

2.示例代码

Dim score as double 					    '定义变量存储成绩'
score = inputBox("请输入本次考试成绩:")		 '将键盘输入的值赋值给变量'
Select Case score
    Case 85 To 100
        MsgBox ("成绩优秀")
    Case 60 To 84
        MsgBox ("成绩合格")
Case Else
    MsgBox ("成绩较差")
End Select

输入年份和月份,输出对应的天数。

捕获
Dim year as Integert	'定义变量存储年份'
Dim month as Integer 	'定义变量存储月份'

year = inputbox("请输入年份")	'键盘输入年份'
month = inputbox("请输入月份")	'键盘输入月份'

'方案1'
'判断年份'
if (year mod 4=0 and year mod 100 <> 0) or year mod 400 = 0
	select case month
		case 1,3,5,7,8,10,12
			print "31天"
        case 4,6,9,11
        	print "30天"
        case 2
        	print "29天"
        case else
        	print "输入有误"
    end select
else
	select case month
		case 1,3,5,7,8,10,12
			print "31天"
        case 4,6,9,11
        	print "30天"
        case 2
        	print "28天"
        case else
        	print "输入有误"
    end select
end if


'方案2'
'判断月份'
select case month
		case 1,3,5,7,8,10,12
			print "31天"
        case 4,6,9,11
        	print "30天"
        case 2
        	if (year mod 4=0 and year mod 100 <> 0) or year mod 400 = 0
        		print "29天"
            else
            	print "28天"
            end if
        case else
        	print "输入有误"
    end select

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择结构比较
结构适用场景举例
if单一判断判断是否成年
if…else…两极分化场景考试及格奖励否则惩罚
if…else if…else钟可能划分根据考试成绩划分等级
select case等值判断或范围判断判断不同月份的天数
循环结构

​ 一些重复执行的操作适合使用循环结构来完成

  1. ​ Do while…循环

    语法1:
    	Do	{while|Until} <循环条件>
    		语句块
    		[Exit Do语句]
        loop
    执行流程:先判断后执行,判断条件为真,循环执行语句块内容
    Exit Do语句表示当遇到该语句是,退出循环,继续执行后边的程序
    

    执行流程:

    image-20231013153110313

    示例代码:

    '计算1+2+3+4+...+99的和'
    Dim x as Integer	'定义变量存储每次加的数'
    Dim s as Integer	'定义变量存储相加的和'
    
    x = 1	'x初始值为1'
    s = 0	'sum初始值为0'
    	
    Do while x<=99		'设置循环条件x<=99'
        s = s+x			'求和'
        x = x+1			'自变量+1'
    Loop
    Print "1+2+3+4...+99=",s 
    
    '练习:计算1+3+5+...+99的和'
    '练习:假设一张纸的厚度为0.36mm,纸的面积无限大,求对着多少次厚度能超过珠穆朗玛峰(8848000mm)'
    
  2. Do…while循环

    语法:
    	Do
    		语句块
    		[Exit Do]
        Loop {while|Until} <循环条件>
        先执行,后判断,先执行一次语句块,如果判断条件为真继续重复执行。
    

    执行过程:

    image-20231013160041342

示例代码:

'计算1+2+3+4+...+100的和'
Dim x as Integer	'定义变量存储每次加的数'
Dim sum as Integer	'定义变量存储相加的和'

x = 1	'x初始值为1'
sum = 0	'sum初始值为0'

Do 		
    s = s+x			'求和'
    x = x+1			'自变量+1'
Loop While x<=99	'设置循环条件x<=99'
Print "1+2+3+4...+99=",s 
    
'练习:设计一个恋爱脑程序,窗口标题为 你爱我吗? 如果回答我爱你则显示我也爱你,否则一直询问 你爱我吗?'
  1. while…Wend

    语法:
    while <循环条件>
    	语句块
    Wend
    执行逻辑与do while类似,循环条件为真重复执行语句块
    

    示例代码:

    '求1~100之间能被7整除的整数和'
    '打印1~100所有整数'
    Dim i as Integer		'定义变量储存自变量1~100的数值'	
    i = 1				'初始值为1'
    While i<=100
        print i
        i=i+1
    Wend
        
    '练习:求100以内所有能被7整除的数字之和'
    
  2. for循环

    语法:
    For 循环变量 = 初始值 to 最终值 [Step 步长]
    	语句块
    	[Exit For]
    Next [循环变量]
    循环变量:是一个数值型变量
    初始值,最终值,步长(默认为1)均为数值或数值表达式
    Next语句后的循环变量必须与For语句后的循环变量相同,可省略  
    

    执行流程:

    image-20231013165204829

    示例代码:

    '计算1+3+5+7...+99'
    Dim sum as Integer	'定义求和变量'
    Dim i as Integer	'定义循环变量'
    sum = 0		'初始值为0'
    for i=1 to 99 step 2
    	sum =sum+i
    Next
    Print "1+3+5+7+...+99=";sum
    
    '练习:求1000以内所有的水仙花数
    '水仙花的各位是为个位、十位、百位的数字立方和等于原数
    '例如:
    '123是1³+2³+3³=1+8+27=123,就不是水仙花数
    '371是3³+7³+1³=27+343+1=371是水仙花数
    
    '猜数字游戏,随机生成一个1~100的随机数,键盘输入一个数字,如果输入的数字和随机生成的数字相同提示中奖,否则提示输入的数大于或小于目标数字'
    
  3. 循环结构比较

    结构特点适用场景
    do while…先判断后执行重复执行某个代码块,但不确定具体执行次数时,可以使用while循环。
    do…while先执行后判断循环程序至少需要执行一次时可选用do…while循环
    for先判断后执行按照固定次数重复执行某个代码块时使用for循环
结构嵌套
  1. 循环结构与选择结构可以随意嵌套,但是必须保证结构完整

    image-20231023153905992image-20231023153954207

循环嵌套
  1. 概念:简单来讲就是循环结构中嵌套循环结构

  2. 执行流程:外层执行一次,内层执行一遍

    使用嵌套实现99乘法表外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    '实现下列图形
    '*****
    '*****
    '*****
    '*****
    '*****
    Dim i As Integer
    Dim j As Integer
    For i = 1 To 5
        For j = 1 To 5
            Print "*";
        Next
        Print ""
    Next
    
    
    '实现下列图形
    '*
    '**
    '***
    '****
    '*****
    Dim i As Integer
    Dim j As Integer
    For i = 1 To 5
        For j = 1 To i
            Print "*";
        Next
        Print ""
    Next
    
    '实现99乘法表'
    Dim i As Integer
    Dim j As Integer
    For i = 1 To 9
        For j = 1 To i
            Print Str(i) & "*" & Str(j) & "=" & Str(i * j) & "  ";
        Next
        Print ""
    Next
    
    
    '实现下列图形
    '*****
    '****
    '***
    '**
    '*
    Dim i As Integer
    Dim j As Integer
    For i = 1 To 5
        For j = i To 5
            Print "*";
        Next
        Print ""
    Next
    
    
    '实现下列图形
    '    *
    '   ***
    '  *****
    ' *******
    '*********
    '空格数=总行数-当前行数
    '*数 = 当前行数*2-1'
    Dim i As Integer
    Dim j As Integer
    For i = 1 To 5
        For j = 1 To 5 - i
            Print " ";
        Next
        For j = 1 To i * 2 - 1
            Print "*";
        Next
        Print ""
    Next
    

第四章 过程

过程:能完成某种特定功能,且能被反复调用的一组程序代码

分类:

  1. 事件过程
  2. 子过程
  3. 函数过程
  4. Property过程
  5. Event过程
事件过程

​ 事件过程由VB自行声明,用户不能增加和删除,是当用户对某个对象发出一个动作时系统会通知VB产生一个事件,VB会自动调用该事件,例如按钮的点击,文本框内容的修改等等都属于事件过程。

语法格式:

private Sub 控件名_事件名(形参列表)

语句组

end Sub

子过程

​ 当有几个不同的事件过程中需要执行相同的操作时,为了简化程序,可以将公共的语句放入分离开的子过程中(通用过程),并由事件过程调用它,这样不需要重复编写代码,维护也跟家容易。子过程不与任何事件过程相联系,只能由别的过程来调用。

创建子过程

  1. ​ 视图方式

    image-20231030094129966
  2. ​ 代码编辑(代码编辑器中选择通用)

    1. 语法:

      [private|public] Sub 过程名称 (形参列表)
      	语句组
      end Sub
      

      作用范围:

      ​ static:静态的,每次调用时局部变量值保持不变

      ​ private:私有的,只能被当前模块所调用

      ​ public:公共的,可以被任意程序调用

      **过程名:**长度不能超过255的字符类型的变量名 ,不能重复

      **参数列表:**表示调用过程传入的参数的类型和个数,不能为定长字符串变量

  3. 特点

    1. end sub标志着子过程的结束。
    2. sub过程不能嵌套

调用子过程

  1. 使用call语句

    Call 过程名(实参列表)
    
  2. 直接使用过程名

    过程名 实参列表          '参数不加括号'
    

示例

定义子过程(无参过程)

public Sub dayin()
print "遥遥领先"
end Sub

事件过程调用子过程

private Sub Command1_Click()
call dayin()
'dayin()           效果相同
end Sub

点击按钮,界面打印“遥遥领先”

定义有参过程

Private Sub sub_jc(ByVal x As Integer, y As Long)
Print x
Print y
End Sub

事件过程调用有参过程

Private Sub Command1_Click()
Call sub_jc(3, 5)
End Sub

练习:计算一个求矩形面积的子过程。

函数过程

​ 函数过程是另一种形式,当执行完过程需要返回一个值时,使用函数更方便,可以参考VB中的内部函数,例如sum(),str()等,只需传入参数就能的到函数值。内部函数不能满足我们的需求,可以自己编写function函数。

定义函数

  1. 对话框添加

  2. 编辑窗口添加

    1. 语法

      [private | public | static] Function 函数名(形参列表)as type
      	语句组
      	函数名=表达式
      end Function
      'as后边时返回值类型,如果不指定给的话返回值为变体型
      '函数的返回值通过"函数名=表达式"来赋值,如果取默认值,则返回类型对应的默认值,例如数值类型返回0,字符串类型返回空串
      

函数的调用

  1. 直接调用

    函数名(实参列表)
    
  2. 使用Call调用

    Call 函数名(实参列表)
    
  3. 无参函数的话直接使用函数名即可

    ‘定义函数
    function a()
    	a="Hello World"
    end function
    
    '调用函数'
    print a
    

练习:使用function编写一个判断输入的整数是奇数还是偶数。

参数分类
  1. 形式参数

    定义过程或函数时规定的参数格式,可以是变量名和数组名,不能是定长字符串。

  2. 实际参数

    调用过程或函数时实际传入的值,可以是变量名,数组名,常数或表达式调用时实参与形参按顺序一一对应。image-20231030175544585

传值与传址

按地址传送:形参默认使用按地址传送,或形参前加ByRef标识。简单来讲按地址传送就是形参是空架子,调用过程时实际使用实参,如果调用过程中值发生变化那么就会作用到实参。

'事件过程'
private sub Command1_Click()
    Dim a as Integer,b as Integer
    a = 10
    b = 20
    call test(a,b)
    print a,b
end sub
'自定义子过程'
sub test(ByRef x as Integer,ByRef y as Integer)
    x = x+10
    y = y*2
    print x,y
end sub
'运行结果:20	 40
'		 20		40

image-20231106091344167

按值传送:形参前加ByVal标识,形参单独在内存 中开辟空间创建变量,然后将实参的值复制过来,所以调用过程时对参数值的修改不会影响到实参本身。调用结束后释放形参空间。

'事件过程'
private sub Command1_Click()
    Dim a as Integer,b as Integer
    a = 10
    b = 20
    call test(a,b)
    print a,b
end sub
'自定义子过程'
sub test(ByVal x as Integer,ByVal y as Integer)
    x = x+10
    y = y*2
    print x,y
end sub
'运行结果:20	40
'		 10		20
image-20231106090804958

指名传递

​ 显式指出与形参结合的实参,把形参用” := “与实参连接起来。使参数不受位置限制。

sub test(first as Integer,second as Integer,third as Integer)
	c = (first+second)*third
	print c
end sub
'传统传值'
test 4,6,8
'指名传递'
test first:=4,second:=6,third:=8
test second:=6,first:=4,third:=8
test third:=8,second:=6,first:=4
数组作为参数

​ 如果要传递的参数太多可以考虑使用数组,如果使用数组作为参数的话,那么形参中数组不能指定长度,调用过程或函数时,数组只写名称即可。

'定义数组参数
public fucntion sum(score() as single)

'调用
sum (score)    'score为数组名'
变量与过程的作用域

作用域:变量或过程的作用范围。程序中能够访问过程或变量的代码范围。

过程

​ 窗体/模块级:局部过程,指在定义过程时加上private关键字。这种过程只能被本窗体或本模块内的其他过 程调用,所有的事件过程都是局部的。

​ 公用级:定义过程时用public修饰,这种过程可以被程序内的所有窗体或模块中的其他过程所调用。

变量:过程级变量:使用Dim声明的变量,变量只能在当前过程中使用。

​ 窗体,模块级变量:在通用模块下使用dim或private修饰的变量,当前模块下的所有过程都可以使用。

​ 全局变量:在通用模块下使用public修饰的变量。一经声明到处可以使用。(浪费内存,不建议使用)

过程的嵌套与递归(了解)

嵌套调用

​ 过程定义不能嵌套,过程的调用可以嵌套。

private sub Commond1_click()
	dim x as Integer
	x = 18
	print f(f(x,(f(x,x-1))),x-1)
end sub

function f(ByVal a as Integer,b as Integer) as integer
	dim c as Integer
	c = a-b : c = c+a : f =t+b
end function
'函数f共调用了三次,第一次调用的返回值作为下一次调用的参数。由内向外,运行结果为17'

递归算法

​ 分为直接递归和间接递归,直接递归为在过程中调用过程本身,间接递归为调用另一个过程,另一个过程反向调用第一个过程。

private sub Command1_Click()
	test 3
end sub


private sub test(x as integer)
	dim i as integer
	if x<>0 then
		call test(x-1)
		for i=1 to x
			print x
        next
	end if
end sub

'点击事件调用test过程,test过程又多次调用其自身。
'运行结果:
'1
'2	2
'3	3	3

第五章 设计界面

窗体
  1. 初始窗体

    image-20231107154955242
  2. 窗体常见属性

  3. 属性名说明
    name窗体名称
    autoredraw设置窗体是否重绘,调整窗体大小遮盖内容是否显示
    backcolor设置窗体的背景颜色
    forecolor设置窗体中显示图片和文本的前景颜色
    caption设置窗体标题
    enable设置窗体可用性
    font设置再窗体中显示文字的字体及大小
    height、width设置窗体的宽度和高度
    icon设置窗体图标
    top、left设置窗体距离容器的距离,单位为twip(缇)
    visible设置窗体是否可见
  4. 属性的设置

    1. 通过视图设置
    2. 使用代码设置:窗体名.属性名 = 值
  5. 窗体的事件

    1. click事件:窗体单击事件

      示例:实现点击窗体,窗体位置发生变化功能

      private Sub Form_Click()
      	Form1.left = form1.left+300
      	From1.top = form1.top+300
      end Sub
      
    2. dbclick事件:规定事件内双击窗体

      示例:实现双击窗体背景颜色随机变化功能

      private Sub Form1_DbClick()
      	dim r as integer,g as integer,b as integer		'定义代表颜色的三个变量'
      	r = int(rnd()*256)								'随机生成红色的值'
      	g = int(rnd()*256)								'随机生成绿色的值'
      	b = int(rnd()*256)								'随机生成蓝色的值'
      	Form1.BackColor = RGB(r,g,b)		'利用RGB()函数为窗体的BackColor属性赋值'
      end sub
      
      色值常数颜色
      vbblack黑色
      vbred红色
      vbgreen绿色
      vbblue蓝色
      vbcyan青色
      vbmagenta紫红色
      vbyellow黄色
      vbwhite白色
    3. initialize事件:当应用程序创建一个窗体时,将触发initialize事件。

    4. load事件:窗体被加载时触发的事件。

      示例:分别给窗体的initialize事件和load事件添加代码,运行程序观察两事件触发的先后顺序。

      private Sub Form1_Initialize()
      	MsgBox "窗体的Initialize事件被触发"
      end Sub
      
      private Sub Form1_Load()
      	MsBox "窗体的Load事件被触发"
      end Sub
      

      程序解读:窗体的Initaialize事件先被触发,点击确定后Load事件被触发,再次确定后,窗体显示回来。

      因为这两个事件是在窗体显示前被触发,因此在此事件中不可使用print方法输出,而要使用MsgBox函数输出。

    5. unload事件:当窗口被关闭时,Unload事件被触发。

        1. 示例:

          Private Sub Form_Unload(Cancel as Integer)
          	msgbox "窗体的unload事件被触发~"
          end Sub
          

          Cancel:非零值可以阻止该窗体从屏幕中删除,如果取值为0,则该窗体将被删除。

        2. Activate事件和Deactivate事件

          当一个窗体成为活动窗体时会触发Activate事件。(显示/获得焦点)

          当一个窗体变为非活动窗体时就会触发Deactivate事件。

          示例

          添加两个窗体,Form1和Form2,通过点击窗体上的按钮切换两个窗体为活动窗体和非活动窗体。观察Activate和Deactivate事件的触发情况。

          步骤一:界面设计

          image-20231114100743477image-20231114100753331

          步骤二:给窗体Form1的Activate事件和Deactivate事件添加如下代码:

          private Sub Form_Activate()
          	print "窗体1的Activate事件被触发!"
          end Sub
          
          private Sub Form_Deactivate()
          	print "窗体1的Deactivate事件被触发!"
          end Sub
          

          步骤三:给窗体Form2的Activate事件和Deactivate事件添加如下代码:

          private Sub Form_Activate()
          	print "窗体2的Activate事件被触发!"
          end Sub
          
          private Sub Form_Deactivate()
          	print "窗体2的Deactivate事件被触发!"
          end Sub
          

          步骤四:给按钮窗体1添加点击事件

          private Sub Command1_Click()
          	Form2.Show
          end Sub
          

          步骤五:给按钮窗体2添加点击事件

          private Sub Command1_Click()    
           	Form1.Show
          end Sub
          

          步骤六:运行程序,观察结果。

          ​ 窗体显示时或者获得焦点时触发Activate事件,失去焦点时触发Deactivate事件。

        3. Resize事件窗体尺寸发生变化时触发

      1. 窗体的方法

        方法是用来定义窗体的各种行为的。可以使窗体进行哪项操作。

        语法:窗体名称.方法

        1. 窗体的加载与卸载方法

          1. load:加载窗体,将窗体加载到内存中,并不代表显示窗体
          2. unload:卸载窗体,将窗体从内存中删除。
        2. 窗体的显示与隐藏方法

          1. show:让窗体显示
          2. hide:让窗体隐藏
        3. 窗体的清除方法

          1. cls:清楚窗体中的显示的文本或图形。
        4. 移动窗体的方法

          1. move:移动窗体,并可改变其大小

            使用:窗体.Move left,top,width,height

            left参数不可省略

          2. refresh:重绘窗体

      2. 多个窗体的工程

        1. 设置启动窗体

          工程---->工程属性------->启动对象

        2. 动态设置启动窗口

          动态设置启动窗口需要将Sub Main子过程设置为启动程序

          添加标准模块,在模块中编写如下代码:

          Sub Main()
          	Dim n as Integer
          	n = inputBox("请输入0或1,以设置启动窗体!")
          	if n=0 then
          		Form1.show
              else
              	Form2.show
              end if
          end Sub
          
控件
  1. 控件的分类

    1. 内部控件:内部控件是由VB本身提供的,在工具箱中显示的控件。
    2. ActiveX控件:控件箱的扩充部分,使用之前需要手动添加至工具先内。
      1. 鼠标右键点击工具箱。
      2. 选择“部件”命令。
      3. 在“控件”选项卡中单机控件复选框,选择需要添加的ActiveX控件。
      4. 单击确定按钮,添加成功。
    3. 插入对象:可插入BMP图片、PPT幻灯片等对象。
  2. 控件的公共属性

    1. name:控件名称
    2. left/top:调整距离顶部和左边的距离
    3. width/height:控件的宽的和高度
    4. enable:控件是否可用
    5. font:设置控件文字的字体,字形,大小和效果
    6. index:索引标识,常见于控件数组中
    7. visible:设置控件是否可见
  3. 控件的公共方法

    1. move:移动控件
    2. refresh:刷新控件
    3. setfocus:为控件设置焦点
  4. 控件的公共事件

    1. click
    2. dbclick
    3. gotfocus
    4. lostfocus
    5. change
  5. 访问键

    命令按钮,复选框,选项按钮都可以创建访问键(快捷键)

    控件caption属性中加入&符号即可创建访问键

  6. 标签(Lable)控件

    1. 功能说明

      显示在程序运行中不能编辑的文字信息

    2. 常用属性

      caption:显示内容

      alignment:设置文本内容对齐方式,0:左对齐 1:右对齐 2:居中

      autosize:设置标签根据文本内容自动改变长度

      wordwrap:设置标签根据文本内容自动改变高度

  7. 文本框(TextBox)控件

    1. 功能说明

      显示文本信息,接受用户输入的文本信息

    2. 常见属性

      text:设置文本框中显示的内容

      alignment:设置文本框中文本的对齐方式

      maxlength:设置文本框中最多可容纳的字符数

      multiline:设置文本框能否输入多行文本

      passwordchar:设置文本框中内容加密

      selstart:设置文本在文本框中的插入位置

      sellength:设置返回选中文本的字符数

      seltext:设置或返回选中的文字

    3. 常用方法

      refresh:刷新文本框内容

      setfocus:使文本框获得焦点

    4. 常用事件

      change:文本框内容修改

      gotfocus:文本框获得焦点

      lostfocus:文本框失去焦点

  8. 命令按钮(commandbutton)控件

  >
  > lostfocus:文本框失去焦点
  1. 命令按钮(commandbutton)控件

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值