首页 VB编程基础教程

VB编程基础教程

举报
开通vip

VB编程基础教程 送给VisualBasic6.0的初学者 应朋友的要求,写这么个东西,这里主要介绍一些学习VB过程中应该注意的问题,因为其他的东西可以从任何一本教材中看到。   1、学习VisualBasic之前最好做好一下几种准备:   •知道Windows操作系统中常见部件的名称,例如“按钮”、“文本框”、“单选按钮”、“滚动条”等。  &n...

VB编程基础教程
送给VisualBasic6.0的初学者 应朋友的要求,写这么个东西,这里主要介绍一些学习VB过程中应该注意的问题,因为其他的东西可以从任何一本教材中看到。   1、学习VisualBasic之前最好做好一下几种准备:   •知道Windows操作系统中常见部件的名称,例如“按钮”、“文本框”、“单选按钮”、“滚动条”等。   •掌握一定的编程思想或数学思想。或者说有一定的逻辑分析能力。   •能经常上机实践,当然最好的学习方法是边看书边实际操作。   初学者推荐阅读高等教育出版社出版的《全国计算机等级考试•二级VisualBasic语言程序设计》(附带一本课后习题答案)、清华大学出版社出版的《VisualBasic程序设计》(谭浩强主编)。其他的书在很多问题上讲的不清楚。不推荐参考。   2、VB中的主要内容:   VB也是一门计算机语言,所以也就避免不了要有各种语法,主要是“变量类型”、“选择程序结构”、“循环程序结构”、“数组”、“子函数和子过程”、“文件”。另外由于VB是可视化的编程工具,所以比传统的QBASIC和C语言多了“控件”这一部分。具体需要那些控件教材里面有介绍。   3、各个章节的重点难点介绍:   这里的“章节”并不是按照教材上的“章节”介绍的,而是按照刚才我划分的“块”介绍。并且是按照国家计算机二级VB考试的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 叙述的。   1)、变量类型   变量和常量的概念。主要的变量类型有:integer、string、long、Boolean、currency、float、double。其中integer、string和Boolean最为常见。   2)选择程序结构   几种常见的选择结构。书上都有介绍。学习过程中记得如何判断条件的“真”“假”,选择不同的程序走向。如果条件为“真”,则怎么样;如果条件为“假”,又该怎么样。最后不要忘了EndIf。   在学习选择程序结构的时候注意培养自己良好的编码风格。看一个例子:PrivateSubnumber_Click(IndexAsInteger)Iflastinput<>"nums"Then   disp=Number(Index).CaptionElse   disp=disp+Number(Index).CaptionEndIflastinput="nums"EndSub   不管你是否能看懂这段程序写的是什么,况且这也不是我让你看这段程序的主要目的。你应该注意这段程序的编码风格,就是格式。VB里面几乎每段代码都在一个“Sub”和“EndSub”中间,所以你在写程序的时候最好使第一行代码向右缩进一个Tab键,按一下键盘上的Tab键,然后输入代码。如果出现“If”等语句的时候,“Then”后面一行的代码要缩进两个Tab键。不知道是否明白。不明白也没有关系。多看一些优秀代码就明白了。   3)循环结构   这一部分可以说对初学者来说比较头疼。特别是循环条件的判定。什么时候要执行循环,什么时候不用执行循环。哪些语句比那些语句少(多)执行一次循环。   主要的循环语句教材上都有详细的讲解,这一部分要多揣摩,多练习。可以在源程序上用笔划出语句执行的顺序。其实用不了多长时间就明白了。   给出一个典型的例子:“百钱买百鸡”PrivateSubCommand1_Click()Dimx%,y%,z%,tAsData,t1AsDataForx=0To100Fory=0To100Forz=0To100Ifx+y+z=100And3*x+2*y+0.5*z=100ThenPrint"能买母鸡";x;"只,公鸡";y;"只,小鸡";z;"只"EndIfNextz,y,xEndSub   这段程序可以算是初学者比较经典的算法。100块钱,要买三种鸡,母鸡3元一只,公鸡2元一只,小鸡0.5元一只。问一共可以买几只。研究完算法之后别忘了看格式。其中Nextz,y,x的顺序不能颠倒,也可以写成如下格式:PrivateSubCommand1_Click()Dimx%,y%,z%,tAsData,t1AsDataForx=0To100Fory=0To100Forz=0To100Ifx+y+z=100And3*x+2*y+0.5*z=100ThenPrint"能买母鸡";x;"只,公鸡";y;"只,小鸡";z;"只"EndIfNextzNextyNextxEndSub   4)数组   数组是一种重要的数据结构。要多练习。其中VB里面最容易出错的就是下标!例如定义一个数组Arr(4),那么它一共5个变量:Arr(0)开始,一直到Arr(4)。   5)子函数和子过程   这里我沿用QBASIC里面的叫法。在子函数(过程)部分最容易搞不懂的概念就是“传地址”和“传值”,即“ByRef”和“ByVal”,ByRef是默认的。也就是说如果没有在函数的参数列表中注明是那种传递方式,默认按照传地址进行处理。函数中的数值既可以由主函数传递到子函数(过程)中,也可以由子函数(过程)回到主函数中。其实我这里说的“主函数”是不确切的,应该叫做“主调函数”。另外还有一个与之相关的概念是“形参”和“实参”,就是“实际参数”和“形式参数”。实际参数是子函数(过程)中的参数,而形式参数是“主调函数”中的参数。   我觉得VB中子函数参数调用应该是比其他计算机语言简单的一个地方,包括C/C++等。在C/C++中,参数传递默认的是传值。就是不能把子函数(过程)的参数传回主调函数,如果要进行这样的操作,就要借助指针变量。   看一个简单的子函数(过程)调用的例子:PublicSubSwap(x,y)   DimtAsInteger   t=x   x=y   y=tEndSubPrivateSubForm_Click()   DimaAsInteger   DimbAsInteger   a=10   b=20   Swapa,b   Print”a=”;a,”b=”;bEndSub   Form_Click是主调函数,Swap是子函数(过程)。在主调函数的倒数第三行调用了子函数(过程),输出结果为:“a=20,b=10”。   6)文件   这一部分单独考试出题不多,实际应用中用到的也不多,但是它总是在某些考试中以压轴题的姿态出现。并且更为严重的是:如果对这一部分不清楚,会使整道题都无从下手。所以还是要好好看看这部分为好。   7)常见控件   对于控件最令初学者头疼的是“属性”、“事件”和“方法”这三个概念。   这三个概念是“面向对象程序设计”专用的。VB6虽然不能算是标准的“面向对象程序语言”,但是具备了很多的面向对象特征,唯独不具备“类的继承”特征。考虑到初学者对面向对象编程没有基础,所以关于上述三个概念就不能给出确切的定义。但是我们可以这样去理解这三个概念:“属性”就是某个控件的固有性质,拿Command(按钮)控件为例,它的“属性”就有“长度”、“宽度”、“是否显示图片”等。简单来说,大多数初学者接触的控件属性,都可以在VB6开发环境中的属性栏找到(如果找不到的属性称为“只读属性”)。   “事件”很容易理解。比如我们用鼠标单击一个按钮,这时候“按钮”这个控件就接收鼠标的单击,换句话说就是“按钮上发生了单击事件”。那么发生单击事件以后程序会做什么呢?那就是运行你编写的针对此事件的程序。现在你打开VB6的界面,随便画一个按钮,然后双击这个按钮,进入代码视图,在PrivateSubCommand_Click()和EndSub之间写代码。那么你写的这段代码就是名称为Command的按钮发生Click事件执行的代码。   “方法”的概念最不容易理解。按照标准的面向对象编程描述,方法是一个函数,它被封装在类中。其实我们也可以把方法想想成一个“函数”,类似上文中描述的“子函数(过程)”。初学者常用的VB6方法不多,其中最常用的就是“Print”。正如您所想象的那样,刚才使用的时候也没有发现它有多么特殊。其实我们已经在使用Print方法了。只不过它所归属的对象我们不需要知道而已。   关于控件的使用这里就不多说了,因为教科书上介绍的比我介绍的详细的多。4、结束语:   VisualBasic6.0可以说算是最简单的一门计算机语言。学习的时候多用心。其实前面“变量”部分即使记不住也无妨,在后续的学习过程中会不断牢固以前的知识的。更何况现在的考试都带有MSDN,就是VB的帮助系统。如果有哪些关键字或者用法记不清楚了,可以随时查阅MSDN的相关文档。   最后祝各位VB愉快!附:送上几例经典的算法求最大公约数和最小公倍数PrivateSubCommand3_Click()Dimm1%,m%,n%,n1%,r%,b%m1=Val(InputBox("输入一个数:"))n1=Val(InputBox("请输入另一个数:"))Ifm1>n1Thenm=m1:n=n1Elsem=n1:n=m1Dor=mModnIfr=0ThenExitDom=nn=rLoopPrintm1;"和";n1;"的最大公约数为:";nb=m1*n1/nPrintm1;"和";n1;"的最小公倍数为:";bEndSub求100到200之间所有的素数(质数)PrivateSubCommand2_Click()Dimi%,m%Form=101To199Step2Fori=2ToInt(Sqr(m))If(mModi)=0ThenGoTonotnextM'一旦被2到sqr(m)的数整除就转到下一个数NextiPrintmnotnextM:NextmEndSub注意!程序中使用了GoTo语句! VB编程基础教程一 代码模块VisualBasic的代码存储在模块中。模块有三种类型:窗体、标准和类。简单的应用程序可以只有一个窗体,应用程序的所有代码都驻留在窗体模块中。而当应用程序庞大复杂时,就要另加窗体。最终可能会发现在几个窗体中都有要执行的公共代码。因为不希望在两个窗体中重复代码,所以要创建一个独立模块,它包含实现公共代码的过程。独立模块应为标准模块。此后可以建立一个包含共享过程的模块库。每个标准模块、类模块和窗体模块都可包含:声明。可将常数、类型、变量和动态链接库(DLL)过程的声明放在窗体、类或标准模块的模块级。过程。Sub、Function或者Property过程包含可以作为 单元 初级会计实务单元训练题天津单元检测卷六年级下册数学单元教学设计框架单元教学设计的基本步骤主题单元教学设计 来执行的代码片段。本章后面的“过程概述”一节中将讨论这些内容。窗体模块窗体模块(文件扩展名为.FRM)是大多数VisualBasic应用程序的基础。窗体模块可以包含处理事件的过程、通用过程以及变量、常数、类型和外部过程的窗体级声明。如果要在文本编辑器中观察窗体模块,则还会看到窗体及其控件的描述,包括它们的属性设置值。写入窗体模块的代码是该窗体所属的具体应用程序专用的;它也可以引用该应用程序内的其它窗体或对象。标准模块标准模块(文件扩展名为.BAS)是应用程序内其它模块访问的过程和声明的容器。它们可以包含变量、常数、类型、外部过程和全局过程的全局(在整个应用程序范围内有效的)声明或模块级声明。写入标准模块的代码不必绑在特定的应用程序上;如果不小心用名称引用窗体和控件,则在许多不同的应用程序中可以重用标准模块。类模块在VisualBasic中类模块(文件扩展名为.CLS)是面向对象编程的基础。可在类模块中编写代码建立新对象。这些新对象可以包含自定义的属性和方法。实际上,窗体正是这样一种类模块,在其上可安放控件、可显示窗体窗口。详细信息关于在类模块中编写代码的更详细的信息,请参阅“用对象编程”。注意VisualBasic的专业版和企业版也包含ActiveX文档、ActiveX设计器和用户控件。它们介绍了具有不同文件扩展名的新模块类型。从编写代码的角度来看,这些模块应视同为窗体模块。使用“代码编辑器”VisualBasic“代码编辑器”是一个窗口,大多数代码都在此窗口上编写。它象一个高度专门化的字处理软件,有许多便于编写VisualBasic代码的功能。图5.4所为示“代码编辑器”窗口。图5.4“代码编辑器”窗口因为要操作模块中的VisualBasic代码,所以要为每一个从“工程资源管理器”中选择的模块打开一个独立的“代码编辑器”窗口。在每个模块中,对于模块中所包含的每个对象,将模块中的代码再细分出与对象对应的独立部分。用“对象列表框”实现各部分间的切换。在窗体模块中,该列表包含一个通用段,一个属于窗体自身的段以及窗体所包含的每一控件的段。对于类模块,列表包括一个通用段和一个类段;对于标准模块,只有一个通用段被显示。每一段代码都可包含几个用“过程列表框”访问的不同过程。对窗体或控件的每一个事件过程,窗体模块的过程列表都包含一个独立的段。例如,Label控件的过程列表就包含Change事件段、Click事件段和DblClick事件段等等。类模块只列举类本身的事件过程—初始化和终止。标准模块不列举任何事件过程,因为标准模块不支持事件。模块通用段的过程列表只包含唯一段—声明段,其中放置模块级的变量、常数和DLL声明。当在模块中添加子过程或函数过程时,那些过程被添加到声明段下方的“过程列表框”中。代码的两种不同视图都可用于“代码编辑器”窗口。可以一次只查看一个过程,也可以查看模块中的所有过程,这些过程彼此之间用线隔开(如图5.4所示)。为了在两个视图之间进行切换,利用编辑器窗口左下角的“查看选择”按钮。自动完成编码VisualBasic能自动填充语句、属性和参数,这些性能使编写代码更加方便。在输入代码时,编辑器列举适当的选择、语句或函数原型或值。通过“工具”菜单上的“选项”命令访问“选项”对话框,在“选项”对话框的“编辑器”选项卡上可用这样的选项,由它们决定是允许还是禁止各代码的设置值。在代码中输入一控件名时,“自动列出成员特性”会亮出这个控件的下拉式属性表(图5.5)。键入属性名的前几个字母,就会从表中选中该名字,按Tab键将完成这次输入。当不能确认给定的控件有什么样的属性时,这个选项是非常有帮助的。即使选择了禁止“自动列出成员特性”,仍可使用CTRL+J组合键得到这种性能。图5.5“自动列表成员功能”“自动快速信息”功能显示语句和函数的语法(图5.6)。当输入合法的VisualBasic语句或函数名之后,语法立即显示在当前行的下面,并用黑体字显示它的第一个参数。在输入第一个参数值之后,第二个参数又出现了,同样也是黑体字。“自动快速信息”也可以用CTRL+I组合键得到。图5.6“自动快速信息”书签在代码编辑器中书签可用来标记代码的某些行,以便您以后可以很容易地返回这些行。书签开关的切换以及定位到已有书签的命令可以在编辑、书签菜单项或编辑工具栏中得到。详细信息关于如何使用组合键使用“代码编辑器”窗口的各种功能的更详细信息,请参阅“代码窗口的快捷键”。 变量在VisualBasic中执行应用程序期间,用变量临时存储数值。变量有名字(用来引用变量所包含的值的词)和数据类型(确定变量能够存储的数据的种类)。可以把变量看作内存中存放未知值的所在处。例如,假定正在为水果铺编一个销售苹果的软件。在销售实际发生之前并不知道苹果的价格和销量。此时,可以设计两个变量来保存未知数—将它们命名为ApplePrice和ApplesSold。每次运行程序时,用户就这两个变量提供具体值。为了计算总的销售额,并且将结果显示在名叫txtSales的文本框中,代码应该是这样的:txtSales.txt=ApplePrice*ApplesSold每次根据用户提供的数值,这个表达式返回不同的金额。由于有了变量,就可以设计一个算式,而不必事先知道实际的输入是多少。在这个例子中,ApplePrice的数据类型是货币,而ApplesSold的数据类型是整数。变量还可以表示许多其它数值,比如:文本数值、日期、各种数值类型,甚至对象也在此列。存储和检索变量中的数据用赋值语句进行计算,并将结果赋予变量:ApplesSold=10      '将值10                  '传给变量。ApplesSold=ApplesSold+1      '变量值                              '增一。注意,例子中的等号是赋值符,并不是等于操作符;它将数值(10)赋予变量(ApplesSold)。声明变量声明变量就是事先将变量 通知 关于发布提成方案的通知关于xx通知关于成立公司筹建组的通知关于红头文件的使用公开通知关于计发全勤奖的通知 程序。要用Dim语句声明变量,Dim语句提供了变量名:Dimvariablename[Astype]在过程内部用Dim语句声明的变量,只有在该过程执行时才存在。过程一结束,该变量的值也就消失了。此外,过程中的变量值对过程来说是局部的—也就是说,无法在一个过程中访问另一个过程中的变量。由于这些特点,在不同过程中就可使用相同的变量名,而不必担心有什么冲突和意想不到变故。变量名:必须以字母开头。不能包含嵌入的句号或者嵌入的类型声明字符。不得超过255个字符。在同一个范围内必须是唯一的。范围就是可以引用变量的变化域—一个过程、一个窗体等等。由于Dim语句中的可选的Astype子句,可以定义被声明变量的数据类型或对象类型。数据类型定义了变量所存储信息的类型。String、Integer和Currency都是数据类型的例子。变量也可以包含来自VisualBasic或其它应用程序的对象。Object、Form1和TextBox都是VisualBasic对象类型或类的实例。详细信息关于对象的更详细的信息,请参阅“用对象编程”和“用部件编程”。在本章后面的“数据类型”部分将详细讨论数据类型。声明变量的其它方式:不在过程内部,而在窗体、标准或类模块的声明段声明变量,这将使变量对模块中的所有过程有效。用Public关键字声明变量,这将使变量在整个应用程序中有效。用Static关键字声明一个局部变量,那么,即使过程结束,变量的值也仍然保留着。隐式声明在使用一个变量之前并不必先声明这个变量。例如,可以书写这样一个函数,在其中就不必在使用变量TempVal之前先声明它:FunctionSafeSqr(num)  TempVal=Abs(num)  SafeSqr=Sqr(TempVal)EndFunctionVisualBasic用这个名字自动创建一个变量,使用这个变量时,可以认为它就是显式声明的。虽然这种方法很方便,但是如果把变量名拼错了的话,会导致一个难以查找的错误。例如,假定写了这样一个函数:FunctionSafeSqr(num)  TempVal=Abs(num)  SafeSqr=Sqr(TemVal)EndFunction乍看起来,这两段代码好象是一样的。但是因为在倒数第二行把TempVal变量名写错了,所以函数总是返回0。当VisualBasic遇到新名字,它分辨不出这是意味着隐式声明了一个新变量呢,还是仅仅把一个现有变量名写错了,于是只好用这个名字再创建一个新变量。显式声明为了避免写错变量名引起的麻烦,可以 规定 关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定 ,只要遇到一个未经明确声明就当成变量的名字,VisualBasic都发出错误警告。要显式声明变量,请在类模块、窗体模块或标准模块的声明段中加入这个语句:OptionExplicit—或—在“工具”菜单中选取“选项”,单击“编辑器”选项卡,再复选“要求变量声明”选项。这样就在任何新模块中自动插入OptionExplicit语句,但不会在已经建立起来的模块中自动插入;所以在工程内部,只能用手工方法向现有模块添加OptionExplicit。如果对包含SafeSqr函数的窗体或标准模块执行该语句,那么VisualBasic将认定TempVal和TemVal都是未经声明变量,并为两者都发出错误信息。随后就可以显式声明TempVal。FunctionSafeSqr(num)  DimTempVal  TempVal=Abs(num)  SafeSqr=Sqr(TemVal)EndFunction因为VisualBasic对拼错了的TemVal显示错误信息,所以能够立刻明白是什么问题。由于OptionExplicit语句有助于抓住这些类型的错误,所以最好在所有代码中使用它。注意OptionExplicit语句的作用范围仅限于语句所在模块,所以,对每个需要VisualBasic强制显式变量声明的窗体模块、标准模块及类模块,必须将OptionExplicit语句放在这些模块的声明段中。如果选择“要求变量声明”,VisualBasic会在后续的窗体模块、标准模块及类模块中自动插入OptionExplicit,但是不会将它加入到现有代码中。必须在工程中通过手工将OptionExplicit语句加到任何现有模块中。理解变量的范围变量的范围确定了能够知晓该变量存在的那部分代码。在一个过程内部声明变量时,只有过程内部的代码才能访问或改变那个变量的值;它有一个范围,对该过程来说是局部的。但是,有时需要使用具有更大范围的变量,例如这样一个变量,其值对于同一模块内的所有过程都有效,甚至对于整个应用程序的所有过程都有效。VisualBasic允许在声明变量时指定它的范围。指定变量的有效范围一个变量在划定范围时被看作是过程级(局部)变量,还是模块级变量,这取决于声明该变量时采用的方式。范围专用公用过程级变量对于这种过程是专用的,在该过程中出现了这些变量。不可使用。不能在一个过程中声明公用变量。模块级变量对于这种过程是专用的,在该过程中出现了这些变量。变量可用于所有模块。过程内部使用的变量过程级变量只有在声明它们的过程中才能被识别。也称它们为局部变量。用Dim或者Static关键字来声明它们。例如:DimintTempAsInteger—或者—StaticintPermanentAsInteger在整个应用程序运行时,用Static声明的局部变量中的值一直存在,而用Dim声明的变量只在过程执行期间才存在。对任何临时计算来说,局部变量是最佳选择。例如,可以建立十来个不同的过程,每个过程都包含称作intTemp的变量。只要每个intTemp都声明为局部变量,那么每个过程只识别它自己的intTemp版本。任何一个过程都能够改变它自己的局部的intTemp变量的值,而不会影响别的过程中的intTemp变量。模块内部使用的变量按照缺省规定,模块级变量对该模块的所有过程都可用,但对其它模块的代码不可用。可在模块顶部的声明段用Private关键字声明模块级变量,从而建立模块级变量。例如:PrivateintTempAsInteger在模块级,Private和Dim之间没有什么区别,但Private更好些,因为很容易把它和Public区别开来,使代码更容易理解。所有模块使用的变量为了使模块级的变量在其它模块中也有效,用Public关键字声明变量。公用变量中的值可用于应用程序的所有过程。和所有模块级变量一样,也在模块顶部的声明段来声明公用变量。例如:PublicintTempAsInteger注意不能在过程中声明公用变量,只能在模块的声明段中声明公用变量。详细信息有关变量的其它信息,请参阅“高级变量主题”。静态变量除范围之外,变量还有存活期,在这一期间变量能够保持它们的值。在应用程序的存活期内一直保持模块级变量和公用变量的值。但是,对于Dim声明的局部变量以及声明局部变量的过程,仅当过程在执行时这些局部变量才存在。通常,当一个过程执行完毕,它的局部变量的值就已经不存在,而且变量所占据的内存也被释放。当下一次执行该过程时,它的所有局部变量将重新初始化。但可将局部变量定义成静态的,从而保留变量的值。在过程内部用Static关键字声明一个或多个变量,其用法和Dim语句完全一样:StaticDepth例如,下面的函数将存储在静态变量Accumulate中的以前的运营总值与一个新值相加,以计算运营总值。FunctionRunningTotal(num)  StaticApplesSold  ApplesSold=ApplesSold+num  RunningTotal=ApplesSoldEndFunction如果用Dim而不用Static声明ApplesSold,则以前的累计值不会通过调用函数保留下来,函数只会简单地返回调用它的那个相同值。在模块的声明段声明ApplesSold,并使它成为模块级变量,由此也会收到同样效果。但是,这种方法一旦改变变量的范围,过程就不再对变量排他性存取。由于其它过程也可以访问和改变变量的值,所以运营总值也许不可靠,代码将更难于维护。声明所有的局部变量为静态变量为了使过程中所有的局部变量为静态变量,可在过程头的起始处加上Static关键字。例如:StaticFunctionRunningTotal(num)这就使过程中的所有局部变量都变为静态,无论它们是用Static、Dim或Private声明的还是隐式声明的。可以将Static放在任何Sub或Funtion过程头的前面,包括事件过程和声明为Private的过程1/1/95#也可用Const语句定义字符串常数:PublicConstconVersion="07.10.A"ConstconCodeName="Enigma"如果用逗号进行分隔,则在一行中可放置多个常数声明:PublicConstconPi=3.14,conMaxPlanets=9,_conWorldPop=6E+09等号(=)右边的表达式往往是数字或文字串,但也可以是其结果为数或字符串的表达式(尽管表达式不能包含函数调用)。甚至可用先前定义过的常数定义新常数。ConstconPi2=conPi*2一旦已定义常数,就可将其放置在代码中,使代码更可读。例如:StaticSolarSystem(1ToconMaxPlanets)IfnumPeople>conWorldPopThenExitSub设定用户自定义常数的范围和变量声明一样,Const语句也有范围,也使用相同的规则:为创建仅存在于过程中的常数,请在这个过程内部声明常数。为创建一常数,它对模块中所有过程都有效,但对模块之外任何代码都无效,请在模块的声明段中声明常数。为创建在整个应用程序中有效的常数,请在标准模块的声明段中进行声明,并在Const前面放置Public关键字。在窗体模块或类模块中不能声明Public常数。详细信息关于范围的更详细信息,请参阅本章前面的“理解变量的范围”一节。避免循环引用由于常数可以用其它常数定义,因此必须小心,在两个以上常数之间不要出现循环或循环引用。当程序中有两个以上的公用常数,而且每个公用常数都用另一个去定义时就会出现循环。例如:'在Module1中:PublicConstconA=conB*2  '在整个应用程序                            '中有效。'在Module2:PublicConstconB=conA/2  '在整个应用程序                              '中有效。如果出现循环,在试图运行此应用程序时,VisualBasic就会产生错误信息。不解决循环引用就不能运行程序。为避免出现循环,可将公共常数限制在单一模块内,或最多只存在于少数几个模块内。 VB编程基础教程二 高级变量主题数值在变量中的内部表示Variant变量维护它们所存储的数值的内部表示。这个表示将决定VisualBasic在执行比较操作和其它操作时如何处理这些值。将值赋予Variant变量时,VisualBasic会用最紧凑的表示正确 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 这个值。以后的操作可能使VisualBasic改变这个用于特定变量的表示。(Variant变量不是无类型变量,而是能够随意改变类型的变量。)这些内部表示与本章前面在“数据类型”中讨论的数据类型相一致。注意Variant总保持16位,无论其中存储了什么数据。对象、字符串和数组,在物理上并非存于Variant之中;在这些情况下,用四个字节的Variant来保持对象引用、或者字符串或数组的指针。而真正的数据存在其它地方。很多时候,不必了解VisualBasic为特殊变量使用哪一种变量类型;VisualBasic会自动转换类型。若想了解VisualBasic正在使用哪种变量类型,可使用VarType函数。例如,如果在Variant变量中存储二进制值,VisualBasic就会用Double内部表示。如果知道应用程序并不需要Double值提供的高精度(以及由此而来的低速度),那么将此值转换成Single甚至转换成Currency就可以加快计算速度:IfVarType(X)=5ThenX=CSng(X)  '转换成单精度。对Array变量,VarType的值等于数组元素与数据类型返回值之和。例如,这个数组包含Double值:PrivateSubForm_Click()  DimdblSample(2)AsDouble  MsgBoxVarType(dblSample)EndSubVisualBasic的今后版本可能会增加新的Variant表示,所以,任何根据VarType函数的返回值做出判断的代码都应能适当地处理非当前定义的返回值。详细信息关于VarType函数的信息,请参阅语言参考中的“VarType函数”。关于数组的更详细信息,请参阅本章后面的“数组”。关于转换数据类型的详细信息,请参阅本章前面的“数据类型”。Variant变量中存储的Numeric值在Variant变量中存储整个数时,VisualBasic使用最紧凑的表示。例如,若是存储不带小数点的微小的数值,Variant对该值使用Integer表示。如果此后赋予一个较大的数,则VisualBasic将使用Long值,如果这个数非常大或者有小数部分,则VisualBasic将使用Double值。有时想对一个数使用特定表示。例如,为了在以后的计算中避免舍入误差,可能希望Variant变量将数值作为Currency存储起来。VisualBasic提供了几种转换函数,可以用它们将值转换成指定的类型(参阅本章前面的“转换数据类型”)。例如,用Ccur函数可将值转换成Currency类型:PayPerWeek=CCur(hours*hourlyPay)如果Variant变量不含数或者不含可以解释为数的内容,则对Variant变量执行数学运算或函数计算就会出错。例如,不能对'U2'这个值进行任何算术运算,尽管它包含一个数值字符'2',但整个值并非合法的数。同样不能对值1040EZ进行任何计算,但是,可以对+10或-1.7E6进行计算,因为它们是有效的数。因此经常需要判定Variant变量是否包含可以当作数使用的值。IsNumeric函数可以完成这样的任务:Do  anyNumber=InputBox("Enteranumber")LoopUntilIsNumeric(anyNumber)MsgBox"Thesquarerootis:"&Sqr(anyNumber)当VisualBasic将一个非数值的表示(如包含一个数的字符串)转换成数值时,它会使用地区设置(在Windows的“控制面板”中规定)来解释千位分隔符、小数点符号和货币符号。于是,如果Windows的“控制面板”中的国家/地区设置值被设置成美国、加拿大或澳大利亚,则这两个语句将返回True:IsNumeric("$100")IsNumeric("1,560.50")而下面两个语句则返回false:IsNumeric("DM100")IsNumeric("1.560,50")但是,如果在Windows的“控制面板”中的国家/地区设置值被设置成德国,则情况正好相反:前两个语句返回false,而后两个语句返回true。如果把包含数的Variant赋给字符串变量或属性,VisualBasic自动把数的内部表示转换成字符串。如果想显式地将数转换成字符串,可以用CStr函数。还可以用Format函数将数转换成字符串,字符串包含某种格式,如货币符,千位分隔符和小数点符号。Format函数按照Windows“控制面板”中的“地区设置”对话框自动使用相应的符号。详细信息请参阅的语言参考中的"Format函数"以及关于转换函数的主题。关于编写分布在国外市场的应用程序的更详细信息,请参阅“国际化”。Variant变量中存储的字符串一般说来,在Variant变量中存储和使用字符串不会出什么问题。但是如前所述,有时在使用两个Variant值时,"+"运算符的结果可能很含糊。如果两个Variant变量都包含数,则"+"运算符执行加法运算。如果两个Variant变量都包含字符串,则"+"运算符执行字符串连接。但是,如果一个值代表数,而另一个值代表字符串,则情况就很复杂了。VisualBasic首先试图把字符串变成数。如果转换成功,那么"+"运算符把两者加在一起;如果不成功,则产生一个“类型不匹配”错误。为了确保执行的动作为字符串连接,不管变量中的表示如何,都用&运算符。例如,以下代码:SubForm_Click()  DimX,Y  X="6"  Y="7"  PrintX+Y,X&Y  X=6  PrintX+Y,X&YEndSub在窗体上产生如下结果:67      6713      67注意VisualBasic在内部用Unicode存储字符串。关于Unicode的更详细的信息,请参阅“国际化"。Variant变量中存储的Date/Time值Variant变量还可以包含Date/Time值。有几个函数返回Date/Time值。例如,DateSerial返回该年所剩的天数。PrivateSubForm_Click()  Dimrightnow,daysleft,hoursleft,minutesleft  rightnow=Now        'Now返回当前的Date和Time。  daysleft=Int(DateSerial(Year(rightnow)_  +1,1,1)-rightnow)  hoursleft=24-Hour(rightnow)  minutesleft=60-Minute(rightnow)  Printdaysleft&"daysleftintheyear."  Printhoursleft&"hoursleftintheday."  Printminutesleft&"minutesleftinthehour."EndSub还可以对Date/Time值进行运算。通过加减一个整数来增加或减少天数;通过加减一个分数来增加或减少时间。所以,加20就是加20天,而减掉1/24就是减去一小时。存储在Variant变量中的Date值的有效范围从公元0100年1月1日到公元9999年12月31日。计算Date时不考虑Gregorian历法采用之前的日期。所以如果计算Gregorian历法被采用那年(在英国及其殖民地为1752年;其它国家/地区则或早一些或晚一些)之前的日期,结果可能会不正确。在代码中可以采用Date/Time文字,只要用一对"#"号将它们括起来,如同对字符串用一对双引号("")括起来一样。例如,可以将包含Date/Time值的Variant和一串表示Date的文字作比较:IfSomeDate>#3/6/93#Then下面的例子将包含Date/Time值的Variant变量和一串表示Date和Time的文字相比较:IfSomeDate>#3/6/931:20pm#Then如果Date/Time值不包括Time,则VisualBasic自动将该值的Time部分设定为午夜(一天的开始)。如果Date/Time值不包括Date,则VisualBasic自动将该值的Date部分设定为公元1899年12月30日。VisualBasic接受许多种文字的Date和Time格式。下面的Date/Time值全部有效:SomeDate=#3-6-9313:20#SomeDate=#March27,19931:20am#SomeDate=#Apr-2-93#SomeDate=#4April1993#详细信息有关用国际格式处理Date的信息,请参阅“国际化”。用IsNumeric函数可测试一个Variant变量是否包含一个值,这个值可以看作有效的数值,同样,用IsDate函数可测试一个Variant变量是否包含一个值,这个值可以看作有效的Date/Time值。然后可用CDate函数将该值转换成Date/Time值。例如,以下代码用IsDate测试文本框的Text属性。如果属性包含被看作有效Date的文本,则VisualBasic将此文本转换成Date并计算到年底还有几天。DimSomeDate,daysleftIfIsDate(Text1.Text)Then  SomeDate=CDate(Text1.Text)  daysleft=DateSerial(Year(SomeDate)+_  1,1,1)-SomeDate  Text2.Text=daysleft&"daysleftintheyear."Else  MsgBoxText1.Text&"isnotavaliddate."EndIf详细信息关于各种Date和Time函数的信息,请参阅的语言参考中的“DateFunction”。Variant变量中存储的Objects可以将Objects存储在Variant变量中。当需要高效地处理包括Objects在内的各种数据类型时,这可能十分有用。例如,一个数组中的所有元素都必须具有相同的数据类型。将数组的数据类型设置成Variant就可将Objects连同其它数据类型一起存入同一个数组中。数组如果有过用其它语言编程的经历,那么想必会熟悉数组的概念。由于有了数组,可以用相同名字引用一系列变量,并用数字(索引)来识别它们。在许多场合,使用数组可以缩短和简化程序,因为可以利用索引值设计一个循环,高效处理多种情况。数组有上界和下界,数组的元素在上下界内是连续的。因为VisualBasic对每一个索引值都分配空间,所以不要不切实际声明一个太大的数组。注意这一部分讨论的数组是程序中声明的变量数组。它们不同于控件数组,控件数组是在设计时通过设置控件的Index属性规定的。变量数组总是连续的;与控件数组不同的是,不能从一个数组的中部加载或卸载数组元素。一个数组中的所有元素具有相同的数据类型。当然,当数据类型为Variant时,各个元素能够包含不同种类的数据(对象、字符串、数值等等)。可以声明任何基本数据类型的数组,包括用户自定义类型(请参阅“再论编程”中的“创建自己的数据类型”)和对象变量(请参阅“用对象编程”)。在VisualBasic中有两种类型的数组:固定大小的数组—它总是保持同样的大小,以及在运行时大小可以改变的动态数组。在本章后面的“动态数组”中将要详细讨论动态数组。声明固定大小的数组有三种方法声明固定大小的数组,用哪一种方法取决于数组应有的有效范围:建立公用数组,在模块的声明段用Public语句声明数组。建立模块级数组,在模块的声明段用Private语句声明数组。建立局部数组,在过程中用Private语句声明数组。设定上下界声明数组时,在数组名之后跟一个用括号括起来的上界。上界不得超过Long数据类型的范围(-2,147,483,64
本文档为【VB编程基础教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
光平
人民教师
格式:doc
大小:43KB
软件:Word
页数:0
分类:
上传时间:2019-12-31
浏览量:1