转VB学习笔记.docx

上传人:b****0 文档编号:17959499 上传时间:2023-08-05 格式:DOCX 页数:63 大小:67.07KB
下载 相关 举报
转VB学习笔记.docx_第1页
第1页 / 共63页
转VB学习笔记.docx_第2页
第2页 / 共63页
转VB学习笔记.docx_第3页
第3页 / 共63页
转VB学习笔记.docx_第4页
第4页 / 共63页
转VB学习笔记.docx_第5页
第5页 / 共63页
转VB学习笔记.docx_第6页
第6页 / 共63页
转VB学习笔记.docx_第7页
第7页 / 共63页
转VB学习笔记.docx_第8页
第8页 / 共63页
转VB学习笔记.docx_第9页
第9页 / 共63页
转VB学习笔记.docx_第10页
第10页 / 共63页
转VB学习笔记.docx_第11页
第11页 / 共63页
转VB学习笔记.docx_第12页
第12页 / 共63页
转VB学习笔记.docx_第13页
第13页 / 共63页
转VB学习笔记.docx_第14页
第14页 / 共63页
转VB学习笔记.docx_第15页
第15页 / 共63页
转VB学习笔记.docx_第16页
第16页 / 共63页
转VB学习笔记.docx_第17页
第17页 / 共63页
转VB学习笔记.docx_第18页
第18页 / 共63页
转VB学习笔记.docx_第19页
第19页 / 共63页
转VB学习笔记.docx_第20页
第20页 / 共63页
亲,该文档总共63页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

转VB学习笔记.docx

《转VB学习笔记.docx》由会员分享,可在线阅读,更多相关《转VB学习笔记.docx(63页珍藏版)》请在冰点文库上搜索。

转VB学习笔记.docx

转VB学习笔记

代码基础:

变量的简单定义格式:

dim变量名这种定义未指明变量的数据类型,这时的变量类型是"变体类型",它自动识别字符串或数字(字符串要加引号)。

 

数据类型的定义方法:

 

定义变量最简单的方法是用"Dim"关键字,它的语法:

 

Dim【变量名】As【数据类型】

如:

DimIndexAsInteger

也可以在一行中定义多个变量,如:

DimIndexAsInteger,NumberAsLong

但把多个变量定义成同一类型不能写:

DimIndex,NumberAsInteger,这样实际index是变体变量。

有时为了简便,也以符号进行简单的定义,作用是和上面一样的。

整型可以用"%"代替,长整型可以用"&"代替,单精度可以用"!

",双精度实型可以用"#"定义,字符型用"$",如刚才的第一个例子可以写成:

DimIndex%等价于DimIndexAsInteger

对于常量的定义用Const定义,如:

ConstCOLOR=255。

constPI=3.1415926 

注:

变量一般用小写,常量则全部大写。

对于程序中经常出现的数值,应设常量,这样一是书写方便,其二,如果要改变该数值,只需改变定义常量的语句值,而不需改变每个语句,提高了效率。

重点笔记:

变量

变量名要以字母开头,在变量名中唯一能用的符号是下划线(_),相同的大写或小写字母的变量,视为同一变量,即不区分大小写。

变量的作用范围关健字:

Public(公用),Private(单个模块),Dim(局部);在VB代码区域中包含四类模块区域:

窗体,MDI窗体,标准模块,类模块。

这是第一层;每一模块区域又分成了通用区域和过程区域,这是第二层。

这就是VB的结构,各个区域之间界线分明。

变量受这些因素的影响也要采用不同方式,标明它的作用范围是全局还是单个模块还是单个过程。

1,在单个事件过程中可见的:

在本过程内部用DIM关健字;

2,在单个模块中可见的:

在本模块顶部(窗体模块会标明"通用"字样)声明段用Private关健字(也可用DIM关健字);注意,不能在一个过程内部声明模块级变量。

3,在所有模块可见的:

在任一模块顶部(窗体模块会标明"通用"字样)声明段用Public关健字,注意:

1,在Form窗体模块顶部的"通用"部分不能声明public的数组,常数,结构类型和API函数。

2,在一个过程的内部不能声明公用变量。

在一个事件中用DIM声明的局部变量,每次触发时产生,完成后消失,不会保留事件运行后的值;如果要一直保留一个局部变量的值,要使用--静态变量。

在过程内部用static关健字声明,它能在第二次触发该事件时保留前一次运行结果,继续运算,而不会来个"重新DIM,初始化",它只在运行时第一次触发该事件时进行初始化。

注:

静态变量如果要初赋值,不能直接进行,要根据变量未赋值的状态使用if语句,如lxn为变体变量:

iflxn=EMPTYthenlxn=336525,例下:

PrivateSubCommand1_Click()

StaticlxnAsInteger

lxn=5错!

应改为Iflxn=0Thenlxn=5

lxn=lxn+1

Printlxn

EndSub

变量的数据类型:

一,数值型。

1,整型(integer),声明字符%,范围-32768到32768。

占用2字节。

2,长整型(long),声明字符&,范围-2147483648到2147483648。

占用4字节。

3,单精度实型(single),声明字符!

,小数点后有效数字7位,占用4字节。

4,双精度实型(double),声明字符#,小数点后有效数字15位,占用8字节。

5,货币型(currency),声明字符@,(Email地址中的那个at号"小老鼠"),这种类型精度高,专用于货币计算或定点计算,小数点后有效数字4位,占用8字节。

6,字节型(byte),存储0--255之间的整数,常用来存储二进制数据,图形和声音文件等,它只占1个字节,节省资源!

二,字符串型(string),声明字符$.

1,变长字符串变量,平常定义的如:

dim(public)lxnasstring,运行时自动调整长度。

2,定长字符串变量,定义如:

dim(public)lxnasstring*50,这时lxn被定义为包含50个字符的变量,给它赋值时若少于50个字符,则用空格补足(要删除空格用Trim和RTrim函数),多于50个则删掉。

使用定长字符串的情形如在随机文件的读写操作中,注:

定长字符串不能在类模块中定义为公用(public)变量。

三,日期型(date)

任何可辩认的文本日期都可赋值给date变量,日期文字前后要加上#号,或直接用文本定义,格式:

dim变量名asdate.

dimlxnasdate 

赋值格式:

变量=#(或")月/日/年/时:

分:

秒AM或PM#(或")

lxn=#06/14/0120:

50:

31AM#或

lxn="06/14/018:

50:

31PM"

如果是一个数值直接赋给日期型变量,如lxn=35477.998,则小数点左边的值代表日期信息,小数点右边的值代表时间信息(如午夜为0中午为0.5),上面lxn的时间值显示为97-2-1623:

57:

07.(我没看懂)。

四,逻辑型(boolean)

也叫布尔型变量,它只有两个值:

true(-1)和false(0).[问题:

当为true时值是1还是-1?

我试了一下是-1,即用printcint(x)试的。

]

五。

变体型(variant)

可适用于各种数据类型,一个没有指明类型的变量VB就指定为此类型。

六,对象型(object或commandbutton或textbox......等对象名,模块名)

这种变量为指向程序中对象的指针,先声明为某类型对象,格式:

dim变量as对象类型名(如果对象为object,则表示可指向任何类型对象)dimlxnascommandbutton(定义lxn为按纽对象类指针),

赋值格式:

set变量名=对象名称

Setlxn=command1

这时,就可以用lxn来代替command1了,如:

lxn.caption="退出"

注:

如果加上New关健字,可以新建窗体,类模块,对象库中的对象,对象变量就成了1个对象。

Set变量名=New对象名称。

七,自定义类型,也叫结构类型。

第1步:

建立类型:

必须在模块级用type语句定义,格式:

private(或public)type类型名

成员1as类型 

成员2as类型……

endtype

如:

privatetypeldd

aasstring

basinteger

casstring

endtype

第2步:

定义此类型的一个变量:

格式:

dim(或public等)变量名as刚才创建的类型 

如:

dimlxnasldd

第3步:

变量的赋值及使用:

用点号连接每一个成员,分别赋值,赋值格式:

变量.成员1=值

变量.成员2=值……

如:

lxn.a="李小敏"

lxn.b=336525

lxn.c="李新宁"

凡是在程序中使用时,就要以"变量.成员名"来引用。

八,枚举类型。

在模块通用部分声明,格式:

Private(Public)Enum类型名privateenumlxn

成员1(可选=常数)李新宁 

成员2(=常数)……李小敏 

endEnumendEnum

然后在程序中定义一个此类型变量,Dim变量as类型。

如:

dimmaslxn

意思是:

变量m的"取值范围"是:

李新宁(值为0)或李小敏(值为1)

"值为0"?

不给成员赋值,缺省状态时第1个成员为0(相当于写:

李新宁=0)

第2个成员为1…类推,总之成员的值为一个"长整数"。

可自己赋给。

枚举类型的作用是在代码中可简化某些总在几个值之间切换的情况,引用如写ifm=李新宁thenend

(这种类型实用价值不大)。

变量数据类型的转换,有以下函数:

cbool(字符串或数值表达式)--返回布尔类型,如:

a=2:

b=2:

lxn=cbool(a=b)

那么lxn值为true

cbyte(0到255的整数)--返回BYTE类型

ccur(参数)--返回货币型

cdate(一个有效的日期表达式)--转换为日期型

cint(参数)--返回(或叫转换)integer型,参数的小数部分四舍五入

clng(参数)--返回long型,小数部分四舍五入。

csng(参数)--返回single(单精度)型,

cdbl(参数)--返回double(双精度)型。

cvar(参数)--返回变体型

cstr(参数)--返回string字符串型。

判断代码中一个变量的数据类型的函数:

vartype(变量名)或typename(变量名),vartype(变量名)返回一个整数值,如返回2代表整型,3代表长整型,4代表单精度,5代表双精度,7代表日期型,8代表字符串等。

例如有个叫lxn的变量,不知它是什么类型,可用x=vartype(lxn),如果x等于2就说明lxn是整型,8就是字符串等等。

typename(变量名)返回一个该变量类型名的字符串,如lxn是整型变量,那么typename(lxn)返回值为"integer"字符串。

★数组的定义类似于变量定义,所不同的是数组需要指定数组中的元素个数,例如:

 

Dimlxn(99)AsInteger

这个数组中包含100个元素,下标从0到99。

也可以指定下标的起始值,例如:

Dimlxn(2to10)AsInteger

这个数组含有九个元素,下标从2到10。

还可以定义多维数组:

Dimlxn(4,2to5,3to6)AsInteger

上例定义了一个三维数组(4×4×4)。

★VB算术运算符:

+(加),-(减),*(乘),/(除),\(整除),Mod(取余数),^(乘方),&(字符串连接)

算术运算符优先级:

()括号;^乘方;-负号;*。

/乘,除;\整除;Mod取余;+,-加,减 

VB比较运算符:

=(等于),<>(不等于),<(小于),>(大于),<=(小于等于),>=(大于等于) 

逻辑运算符:

And:

两边表达式为真时,结果为真;

Or:

两边表达式只要有一个为真时,结果为真;

Not:

后面跟的表达式若为真,结果为假,后跟表达式为假,结果为真;

Xor:

两边表达式一真一假时,结果为真,若两边表达式同真同假,结果为假。

★IF……THEN……语句:

 

简单:

if条件then语句

复杂:

if条件1then 

语句11

语句12

语句13……

elseif条件2then

语句21

语句22

语句23……

elseif条件3then 

……

else

前面条件都不成立时执行语句

endif

分支结构:

selectcase语句

结构:

selectcase变量(也可以是一个属性或表达式)

case可能值一(数值,字符串或其他值)

语句

case可能值二

语句

case可能值三

语句

case可能值四,可能值五,可能值六……(如果有多个可能值都执行一条语句,写在一起,用逗号隔开)

语句

caseelse(也可以没有)

语句

endselect

在selectcase语句中可以使用关系运算符大于>小于<等于=等关系运算符,需要用关键字IS和TO。

用个例子来说明:

PrivateSubCommand1_Click()

DimageAsInteger

age=Text1.Text

SelectCaseage

CaseIs<14(如果age小于14时)

Label1.Caption="小朋友,你好!

"

Case14To23(如果age在14到23时) 

Label1.Caption="学生朋友,认真读书吧。

"

Case24(如果age是24时) 

Label1.Caption="你和我是同龄人"

CaseIs>100(如果age大于100时)

Label1.Caption="你真是个老不死!

"

CaseElse(如果age不满足以上所有值的范围时)

Label1.Caption="按道理我要尊重你。

"

EndSelect

EndSub 

看会了吧,就照着用即可。

循环结构:

FOR……NEXT……语句:

格式:

FOR循环变量=初值TO终值STEP步长

循环体

NEXT循环变量

如果在循环执行过程还未结束时要跳出循环,可用exitfor语句。

例:

PrivateSubCommand2_Click()

Dima%,name$

Fora=1To10

name=InputBox("输入姓名")

Printname

Ifname="lxn"ThenExitFor

Nexta

EndSub

第二种很重要的循环结构是:

DO循环

格式:

A。

DOWHILE条件

循环体

LOOP

B。

DO

循环体

LOOPWHILE条件

将WHILE条件放在循环体的前面与后面,是不同的,A格式的条件在前,执行时先检测条件,为真则执行循环,为假则不执行循环,如果第一次检测条件即为假,则一次也不执行循环,B格式的结构WHILE条件在后,能保证不论条件的真假至少能执行一次循环。

例:

PrivateSubForm_Load()

Dimhs$,ss%

Do

hs=InputBox("输入","华氏")--INPUTBOX的提示栏,标题栏,它的所有输入都是字符型

ss=Int((Val(hs)+40)*5/9-40)

MsgBoxss,,"摄氏度"--MSGBOX的输出内容,标题栏,无按纽参数

LoopWhilehs<>""但逗号不能少

end--由于是在form_load事件中,所以这个end不可丢。

EndSub

上例将华氏温度转为摄氏度。

(下一页) (返回)

★编写对象的自动拖放操作:

1。

将要拖放对象的dragmode属性设置为1(这样就可自动拖动)

2。

设置要拖放对象在拖动过程中的图标提示:

dragicon属性。

3。

编写拖放终点对象的dragdrop事件(或dragover事件)过程。

例:

将窗体上图片框1的图片拖到图片框2里:

PrivateSubForm_Load()

Image1.Picture=LoadPicture("c:

\我的文档\mywebs\红楼梦4.bmp")加载图片

Image1.DragMode=1对象可移动 

Image1.DragIcon=LoadPicture("c:

\ucdos\ico\print.ico")移动时的图标

EndSub

PrivateSubImage2_DragDrop(SourceAsControl,XAsSingle,YAsSingle)

Image1.Visible=False当移到图片框2时,图片框1隐藏。

Image2.Picture=Image1.Picture将图片复制到图片框2中

EndSub

在image2的dragdrop事件中有三个参数:

source和x以及y,source的意思是"源对象",即要拖动对象,这里可用它来代替image1,如在事件过程中写:

source.visible=

falseimage2.picture=source.picture

★在窗体中添加简单的动画:

对象的移动MOVE方法:

要移动的对象.MOVE移动后横坐标,纵坐标,宽度,高度

picture1.move800,500(单位:

缇;1缇=1/1440英寸

用MOVE方法不仅可以移动对象位置,而且可以改变对象的尺寸大小,如下:

对象名.moveleft,top,width,height

Form1.Move5000,0,5000,50(注:

单位为缇)

例:

PrivateSubForm_Load()

Picture1.Picture=LoadPicture("c:

\我的文档\mywebs\红楼梦1.bmp")

Timer1.Interval=1

Timer2.Interval=1

Timer1.Enabled=True

Timer2.Enabled=False

EndSub

PrivateSubTimer1_Timer()

IfPicture1.Left>0AndPicture1.Top>0Then

Picture1.Left=Picture1.Left-50

Picture1.Top=Picture1.Top-70

Else

Timer2.Enabled=True

Timer1.Enabled=False

EndIf

Picture1.MovePicture1.Left,Picture1.Top

EndSub

PrivateSubTimer2_Timer()

IfPicture1.Left<5000AndPicture1.Top<3000Then

Picture1.Left=Picture1.Left+50

Picture1.Top=Picture1.Top+70

Else

Timer1.Enabled=True

Timer2.Enabled=False

EndIf

Picture1.MovePicture1.Left,Picture1.Top

EndSub

★添加标准模块:

"工程"菜单"添加模块"菜单项。

module1是缺省模块名。

此名字可在其属性窗口中改变(只有此一项"属性")。

标准模块与窗体模块并列于一个工程之内。

在标准模块中声明公用变量(或叫全局变量)格式:

public变量名as类型

publiclxn

在前面我们用DIM定义变量,它们都只是局部变量,即只在某个事件过程中可见,而在标准模块中定义的全局变量,则在整个工程中可见,即定义一次之后在其它任何事件中可直接访问。

在标准模块中创建通用过程:

通用过程在整个程序中可见。

象全局变量一样。

可创建三种类型的通用过程:

函数过程,子过程(也叫sub过程),属性过程

函数的语法格式:

publicfunction函数名(形参表)as返回值类型(这个"as返回值类型"不能丢!

)函数体

函数名=返回值

Endfunction

在事件过程中调用函数的方式为:

变量=函数名(实参)--它代表一个确定值,本质是一个变量,可以出现在变量可出现的任何地方。

附出错经验一则:

我想在一个事件中用个变量a,使第一次单击该事件时a=1,第二次单击该事件时a=2;第三次单击该事件时a值为3,即自增1的运算,我在事件中写:

dima

a=1 

a=a+1

可每次单击都得到同一个值2,原来,这是因为a是该事件中的局部变量,

每单击一次就重新执行一次,后来,我想在form_load()事件中写:

dimaa=1,

然后在该事件中只写a=a+1,结果却变成a每次都是1,怎么回事?

form_load事件不是每次程序运行时自动运行的吗,没错,但form_load本身也只是一个事件,在其中定的变量

dima也属局部变量,只在form_load一个事件中可见,因此在另一个事件中用到的a根本没定义,如何定义一个变量在同一个窗体模块中各事件均可见呢?

那就是在"(通用)"部分进行变量的声明,这样在该窗体模块中都可见,但通用部分不能直接进行赋值等运算(可按格式编写函数,子程序等等,同标准模块),参考办法:

(通用):

dimaform_load():

(在其他事件也可,只要在引用a值的那个事件前能赋a=1即可)a=1引用a的事件:

a=a+1

,"对象.属性名"的本质是一个变量,是在该窗体模块(通用)中缺省声明的变量

在标准模块中创建子过程:

格式:

publicsub子过程名称(形参)--此处要括号

过程体

endsub

函数与sub过程的不同是:

函数用其名字返回一个值,子过程处理一段程序过程,无返回值。

在标准模块子过程中设置某个对象属性时,必须指明哪个窗体,如:

publicsublxn()

form1.image1.visible=trueendsub其中那个"form1."不能丢。

在事件中调用子过程的格式:

子过程名称实参--这里的实参不要用括号,如果调用时作为表达式才要括号,多个实参用逗号分开。

不论是函数或是sub过程,其形参与实参之间必须保证类型与数量的一致。

★在文本框的一个输入字符串尾加上"&chr(13)+chr(10)",它能自动换行。

或者用VB的常数vbCrLf也可换行。

相当于C中的"\n".如:

a$="李新宁"&chr(13)+chr(10)text1.text=a$

★什么是集合?

集合是一组相关的对象。

窗体上的全部对象被称作controls(控件)集合,如果一个程序有多个窗体,就要在前面加上窗体名称,如:

form1.controls,每个窗体都有一个controls集合。

这种"集合"被视作也是该窗体的一个对象,它与窗体的关系地位有点象windows的文件夹。

可以通过集合引用其中的对象,格式一,直接使用(集合名!

元素):

窗体名称.controls!

对象名称.属性=属性值

form1.controls!

label1.caption="李新宁"

注:

其中的感叹号是controls集合与对象的连接符号

格式二,采用该对象在controls中的索引值(集合名(索引)):

窗体名称.controls(索引值).属性名=属性值

form1.controls

(1).caption="李新宁"

注:

一个对象在其所在窗体controls集合中的下标是如何排列的呢?

--按对象创建时的顺序逆向确定其下标值,最后一个创建的对象下标为0,倒数第二创建的那个对象下标为1,如果该窗体共有n个对象,那么一开始创建的那个对象的下标为n-1.

集合的运用:

FOREACH…IN…NEXT循环,对一组对象(对象组)的操作。

格式:

FOREACH对象变量IN集合名

对当前对象的操作过程

NEXT对象变量

以上用于对一组对象的操作,例如将窗体上所有对象的位置向左移1000缇:

PrivateSubCommand1_Click()

ForEachlxnInControlslxn是"当前对象"的"替身"

lxn.Left=lxn.Left+1000将当前对象的left属性加1000

Nextlxn下一个controls里的成员

EndSub

如果是有目的地选择一部分对象的移动,怎么办呢?

可以利用对象的标记tag属性,区别不同对象,下例tag属性值为lxm的对象就不移动,

PrivateSubCommand1_Click()

ForEa

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2