用VB编写程序实例_第1页
用VB编写程序实例_第2页
用VB编写程序实例_第3页
用VB编写程序实例_第4页
用VB编写程序实例_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

vb

程序实例(一)创立vbFirstapp

应用程序是很简单的事。有多简单?为回答这个问题,试着创立下边的应用程序。

Hello,vb

和你好,VisualBasic创立vb应用程序有三个主要步骤:1.创立应用程序界面2.设置属性3.编写代码为了说明这一实现过程,依据以下步骤创立一个简单应用程序,该应用程序由一个文本框和一个命令按钮构成。单击命令按钮,文本框中会出现"Hello,world!"信息。创立应用程序界面窗体是创立应用程序的基础。经过使用窗体可将窗口和对话框增添到应用程序中。也可把窗体作为项的容器,这些项是应用程序界面中的不行视部分。比如,应用程序中可能有一个作为图形容器的窗体,而这些图形是打算在其他窗体中显示的。建筑vb应用程序的第一步是创立窗体,这些窗体将是应用程序界面的基础。而后在创立的窗体上绘制构成界面的对象。对于目前的第一个应用程序,你可使用工具箱中的两个控件。用工具箱绘制控件单击要绘制的控件的工具——此时是“文本框”。将指针移到窗体上。该指针变为十字线,以下图。将十字线放在控件的左上角所在处。拖动十字线画出合适您要的控件大小的方框(拖动的意思是按住鼠标左键用鼠标指针挪动对象)。开释鼠标按钮。控件出此刻窗体上。在窗体上增添控件的另一个简单方法是双击工具箱中的控件按钮。这样会在窗体中央创立一个尺寸为缺省值的控件;而后再将该控件移到窗体中的其他地点。调整大小、挪动和锁定控件注意出此刻控件周围的小矩形框称作尺寸句柄;下一步可用这些尺寸句柄调理控件尺寸。也可用鼠标、键盘和菜单命令挪动控件、锁定和解锁控件地点以及调理控件地点。调整控件的尺寸,请依据以下步骤履行:用鼠标单击要调整尺寸的控件。选定的控件上出现尺寸句柄。将鼠标指针定位到尺寸柄上,拖动该尺寸柄直到控件达到所希望的大小为止。角上的尺寸柄能够调整控件水平易垂直方向的大小,而边上的尺寸柄调整控件一个方向的大小。开释鼠标按钮。-或-用SHIFT键加上和箭头键调整选定控件的尺寸。要挪动控件,请:1.用鼠标把窗体上的控件拖动到一新地点。-或-用“属性”窗口改变Top和Left属性。选定控件后,可用

CTRL

键加箭头键每次挪动控件一个网格单元。假如该网格封闭,控件每次挪动一个像素。2.要锁定所有控件地点,请:从“格式”菜单,选用“锁定控件”。或-在“窗体编写器”工具栏上单击“锁定控件切换”按钮。这个操作将把窗体上所有的控件锁定在目前地点,以防备已处于理想地点的控件因不当心而挪动。本操作只锁住选定窗体上的所有控件,不影响其他窗体上的控件。这是一个切换命令,所以也可用来解锁控件地点。创立事件过程vb应用程序的代码被分为称为过程的小的代码块。事件过程,正这样处正要创立的同样,包含了事件发生(比如单击按钮)时要履行的代码。控件的事件过程由控件的实质名称(Name属性中所指定的)、下划线(_)和事件名组合而成。比如,在单击一个名为Command1的命令按钮时调用的Name事件过程,可称为Command1_Click事件过程。要创立事件过程,请依据以下步骤履行:1.在“对象”列表框中,选定活动窗体中的一个对象名(活动窗体是指目前有焦点的窗体)。在这一例子中,选定数令按钮Command1。2.在“过程”列表框中,选择指定对象的事件名。此时Click过程已经被选定,因为它是命令按钮的缺省过程。注意,这时势件过程的模板已经显示在“代码”窗口中。在Sub和EndSub语句之间输入下边的代码:"Hello,world!"这个事件过程应当是:PrivateSubCommand1_Click()="Hello,world!"EndSub值得注意的是,此处代码只简单改变了控件Text1的Text属性,读入"Hello,world!"。这个例子的语法采纳perty的格式,此中Text1是对象,Text是属性。响应应用程序运转中发生的事件时,能够用这类语法来改变任何窗体或控件的属性设置值。详尽信息对于创立其他种类过程的详尽信息,请参阅第五章“编程基础”中的“过程概括”一节。运转应用程序为了运转应用程序,能够从“运转”菜单中选择“启动”,或许单击工具栏中的“启动”按钮,或按F5键。单击方才在窗体上创立的命令按钮,文本框中就会显示"Hello,world!"。Firstapp示例应用程序因为vb供给了远比本例应用程序丰富得多的工具,所以立刻能够使用很多其的特征来管理和配制应用程序。复习示例应用程序是学习vb的极好方法。下述示例展现了用vb编制适用的应用程序是多么的易如反掌。应用程序Firstapp演示了怎样使用data控件和grid控件显示取自数据库的信息表。vb使得从应用程序内部到数据库的接见特别地简单。数据控件供给了在数据库的记录集中遨游的功能,以及使得在grid控件中显示的记录与数据集中的地点同步的能力。本例包含一个数据控件、一个MSFlexGrid控件、一个列表框控件和两个命令按钮。网格显示了从Northwind数据库检索到的产品的信息表。当使用数据控件上的定位按钮选定网格的一项时,被选中的产品名便显示在数据控件上。还能够双击网格中目前选择地点,在列表框控件的“购书单”中增添目前选择的书名。用AddItem方法能够增添列表框的信息。方法是作用于特定对象(本例中为ListBox对象)的vb函数。指定方法的语法与设置属性的语法近似。AddItem方法能够在程序运转时动向地增添列表框的内容。相反,Clear方法用于消除列表框的所有信息。详尽信息对于方法的详尽内容,请参阅第三章“窗体、控件和菜单”中的“属性、方法和事件概括”一节。创立工程创立工程第一要从“文件”菜单中选择“新建工程”,而后从“新建工程”对话框中选定“标准EXE”(初次启动vb时将会显示“新建工程”对话框)。vb创立一个新的工程并显示一个新的窗体。用一个数据控件、一个MSFlexGrid控件、一个列表框控件以及两个命令按钮画出了应用程序的界面。MSFlexGrid控件不在缺省的工具箱内,所以一定增添:要增添控件到工具箱,请依据以下步骤履行:选定工具箱的上下文菜单中的“零件”(能够在工具箱窗口内部单击右键显示上下文菜单。)。“零件”对话框被显示。2.找到“控件”列表框中的“MSFlexGrid(MicrosoftFlexGrid”项,而后选中其左侧的复选框。单击“确立”按钮。在工具箱中有了MSFlexGrid控件的图标。使用工具箱在窗体上画出一个数据控件、一个MSFlexGrid控件、一个列表框控件和两个命令按钮。假如您不记得怎样绘制,请参阅本章前面的"CreatingtheInterface"。设置属性依据下表在属性窗口中设置对象的属性,其他的属性均使用缺省值。数据控件的DatabaseName属性一定包含数据库的实质路径。依据缺省规定,数据库的按钮与vb安装在同一个目录下。在属性窗口中选择DatabaseName属性时,能够单击该属性右边的按钮显示标准的“翻开文件”对话框阅读文件。设置完DatabaseName属性后,属性窗口中的RecordSource属性将包含选中的数据库中的表或记录集的清单。将DataGrid控件的DataSource属性设置为Data1,将自动地把网格和数据控制链接起来。编写事件代码程序所有的代码包含在Command1_Click、Command2_Click、Data1_Reposition和DataGrid1_DblClick事件过程中。双击窗体或控件显示代码窗口,而后输入各事件过程的代码。将以下代码增添到Command1_Click事件过程中,用于单击按钮时消除列表框:PrivateSubCommand1_Click()'

消除列表框。EndSub以上语句调用了列表框List1

Clear

方法,Clear

方法删除该列表框的内容。将以下代码增添到Command2_Click事件过程中,用于从内存中卸载窗体并停止应用程序:PrivateSubCommand2_Click()UnloadForm1End'停止应用程序EndSub以上过程的第一条语句调用窗体的Unload事件。假如需要在停止程序时履行一个功能(比如保留文件),能够把代码放到窗体的Unload事件过程中。第二条语句调用End函数停止程序。将以下代码增添到Data1_Reposition事件过程中,用于每入选择一个记录时更新标题:PrivateSubData1_Reposition()("Title")EndSub以上语句将右边的值(数据控件的记录集的Title字段)赋给左侧的属性(数据控件对象的Caption属性)。将以下代码增添到DataGrid_DblClick事件过程中,用于当双击一个选定的行时向列表框增添信息。PrivateSubDataGrid1_DblClick()("Title")EndSub以上语句调用列表框List1的AddItem方法。增添到列表框中的文本被包含在该方法的参数中(此时为数据控件的记录集的title字段)。将一个值传达给参数近似于给属性赋值,与赋值语句不一样的是不需要用等号。保留工程从“文件”菜单中选用“保留工程”命令来结束本次创立应用程序的工作。vb将分别提示保留窗体和保留工程。能够将工程命名为“书店销售清单”("BookstoreShoppingList.")。Windows95和WindowsNT都同意使用长达255个字符的文件名并且能够包含空格。旧版的MicrosoftWindows只同意八个字符的文件名外加三个字符的扩展名。加强应用程序这样第一个vb应用程序就达成了:这是一个功能简单却很实用的程序。能够以此为基础在自己的应用程序中增添新的功能,用自己的数据替代。自然,要使本程序真实适用,还要增添基本的保留或打印列表框内容的功能、增添更多的信息,如价钱、能否有货,甚至能够采集信誉卡的信息和经过Internet传递订单。经过持续阅读《程序员指南》的其他部分将找到所有相关这些功能的例子和其他更多的知识。用VB编写Hanoi塔问题动向演示程序前言在计算机算法设计中,使用递归技术常常使函数的定义和算法的描绘简捷且易于理解。有些数据结构如二叉树等因为其自己固有的递归特征,特别适适用递归的形式来描绘。还有一些问题,虽然其自己并无显然的递归纳构,但用递归技术来求解使设计出的算法简短、易懂。所以深入掌握递归技术在算法设计过程中能够设计出更为有效的算法[1]。简单地说,递归就是用自己定义自己。使用递归方法结构算法的基本思路是:当求解规模为的问题时,先将其分解成若干个规模较小的与原问题拥有同样特点的子问题,并找出子问题与原问题之间的组合关系,最后依据详细问题结构出递归算法。

n递归算法的履行过程分“递推”和“回归”两个阶段。在递推阶段,把较复杂问题(如:规模为n)的求解推理至较原问题简单调些的问题(如规模为n-1)的求解;在回归阶段,把递推结束时所得到的解,逐级返回,挨次获得稍复杂问题的解,最后获得原问题的解[2]。Hanoi塔问题是一个典型的合适于利用递归技术获得简短算法的例子。Hanoi塔问题源自约19世纪末在欧洲出现的一种游戏,游戏中第一在一块铜板上搁置三根柱子,在第一根柱子上自上而下、由小到大次序串着64个盘子。游戏的目标是最后将所有盘子从第一根柱子上移到第三根柱子上,挪动过程中能够用第二根柱子过渡。游戏规定一次只好挪动一个盘子,并且任何时刻不一样意大盘放在小盘的上边。此刻就给出对于Hanoi塔问题的程序,让其将Hanoi塔问题的履行过程动向演示出来,以帮助读者加深理解递归技术。算法设计我们先利用递归技术对该问题进行算法设计。我们将三根柱子分别标号为A、B、C,目标是要将n个盘子从A柱子挪动到C柱子。该问题能够设计以下的递归算法:第一步将A柱子上n-1个盘子借助C柱子挪动到B柱子上;第二步将A柱子上节余的第n个盘子挪动到C柱子上;第三步将B柱子上的n-1个盘子借助A柱子挪动到C柱子上。对于第一步和第三步,我们又能够利用近似的方法持续将其求解过程设计为一个规模为n-1的Hanoi塔递归算法。3递归算法动向演示过程的程序实现对于该算法的程序实现有两个重点的难点,其一是初始化部分怎样将三根柱子和n个盘子依据问题要求在屏幕上绘制出来;其二是盘子挪动过程的图形实现。form窗体设计及程序初始化第一在form窗体中增添三个命令按钮,如图1所示:图1初始界面在开始履行Hanoi塔问题求解过程以前,需要将三根柱子绘制在屏幕上,还需要接收用户指定的盘子数及将盘子正确显示至A柱子上。在本程序中接收盘子数是利用InputBox函数接收保留至全局变量number中,用实心矩形代表盘子。这一部分的初始化工作在准备按钮的click事件过程中实现,其核心代码以下:DimiAsInteger'设置Form窗体属性="准备..."'设置三个柱子的标志CurrentX=4000CurrentY=hLevel+6116vbRedTrue&H10False画底线(0,hLevel)-(15360,hLevel+100),vbGreen,BF画三根柱子,A柱子的柱底坐标是(4000,10300)纵坐标减10不过为了显示时看的成效更好一些,实质上是不该当减的,减了后柱子底端纵坐标与底线上沿纵坐标就不一致了,但屏幕视觉是一致的(3995,700)-(4005,hLevel-10),vbBlack,BF(7995,700)-(8005,hLevel-10),vbBlack,BF(11995,700)-(12008,hLevel-10),vbBlack,BFnumber=Val(InputBox("请输入盘子数:","输入数据","3"))"共有"&number&"个盘子"盘子宽400*i,高度200相邻盘子之间的高度差设置为210,假如设置为相差200的话,当把上边一个盘子移走时两个盘子重叠部分没法从头修复Fori=1Tonumber((4000-(i*400)/2),(hLevel-(number+1-i)*210))-((4000+(i*400)2),(hLevel-(number-i)*210-10)),,BFNextibaseCoordinateY(1)=hLevel-number*210baseCoordinateY(2)=hLevelbaseCoordinateY(3)=hLevel盘子挪动的实现盘子的挪动过程主要有两种种类的挪动,一种是垂直挪动(包含自上而下和自下而上),另一种是水平挪动(包含从左至右和从右至左)。盘子挪动过程程序实现的主要思想是将每一次盘子从原地点挪动到目标地点的路线切割成足够多的子路径,每个子路径的距离足够小,盘子从某子路径一端挪动至另一端经过两个步骤来实现:第一步将原地点上的盘子颜色设置为form窗体背景色,以达到将盘子从原地点移开的显示成效;第二步在盘子将要抵达的新地点从头绘制该盘子,进而达到盘子挪动到另一端的显示成效。比如某个用(4000,i)-(4000+400),i+200)语句绘制的长为400像素、宽为200像素的盘子需要从矩形左上角坐标为(4000,i)的地点垂直向上挪动到下一地点,则可能将该矩形在原地点从头绘制成窗体背风景,在矩形左上角坐标为(4000,i-stepC)地点从头绘制一个矩形来达到将该矩形从地点(4000,i)挪动到地点(4000,i-stepC)的目的,此中stepC是挪动步长,也即子路径的长度。stepC值不可以设置的过大,假如设置的太大,则盘子挪动过程中将会出现不连续的挪动成效。盘子挪动过程程序实现的核心代码以下:DimiAsInteger,jAsInteger,kAsInteger'i、k表示纵坐标,j表示横坐标"汉诺塔问题-第"&n&"个盘子正在挪动..."向上挪动到first柱子顶端把矩形本次挪动前的图形擦掉((pillarnum(getone)*4000-(n*400)/2),i)-((pillarnum(getone)*4000+(n*400)/2),i+200),,BFfixpillar(getone)((pillarnum(getone)*4000-(n*400)/2),i-stepC)-((pillarnum(getone)4000+(n*400)/2),i-stepC+200),,BFdelayNexti'目前i=600-200-stepC,此时i值表示盘子的目前纵坐标向左、右平移到third柱子顶端向右移Forj=(pillarnum(getone)*4000-(n*400)/2)To(pillarnum(putone)*4000-(n*400)/2)-stepCStepstepC(j,i)-(j+n*400,i+200),,BF(j+stepC,i)-(j+stepC+n*400,i+200),,BFdelayNextjElse向左移Forj=(pillarnum(getone)*4000-(n*400)/2)To(pillarnum(putone)*4000-(n*400)/2)+stepCStep-stepC(j,i)-(j+n*400,i+200),,BF(j-stepC,i)-(j-stepC+n*400,i+200),,BFdelayNextjEndIf向下挪动到third柱子底端把矩形本次挪动前的图形擦掉((pillarnum(putone)*4000-(n*400)/2),k)-((pillarnum(putone)*4000+(n*400)/2),k+200),,BFfixpillar(putone)((pillarnum(putone)*4000-(n*400)/2),k+stepC)-((pillarnum(putone)4000+(n*400)/2),k+stepC+200),,BFdelayNextk'最后在柱子底端再补画一次高度为210的矩形,因为k循环最后一次履行循环体时,k值未必正好等于循环终值baseCoordinateY(pillarnum(putone))-210-stepC,'所以要补一个上沿纵坐标为baseCoordinateY(pillarnum(putone))-210-stepC矩形((pillarnum(putone)*4000-(n*400)/2),k)-((pillarnum(putone)*4000+(n*400)/2),k+200),,BFfixpillar(putone)((pillarnum(putone)*4000-(n*400)/2),baseCoordinateY(pillarnum(putone))210)-((pillarnum(putone)*4000+(n*400)/2),baseCoordinateY(pillarnum(putone))210+200),,BF更新各柱子最面一个盘子上沿的纵坐标baseCoordinateY(pillarnum(getone))=baseCoordinateY(pillarnum(getone))+210baseCoordinateY(pillarnum(putone))=baseCoordinateY(pillarnum(putone))-210EndSubPrivateFunctionpillarnum(chAsString)AsIntegerpillarnum=Asc(ch)+1-Asc("A")EndFunctionPrivateSubfixpillar(pillarABCAsString)纵坐标减10不过为了显示时看的成效更好一些,实质上是不该当减的,减了后柱子底端纵坐标与底线上沿纵坐标就不一致了Ifpillarnum(pillarABC)<3Then(pillarnum(pillarABC)*4000-5,700)-(pillarnum(pillarABC)*4000+5,hLevel-10),vbBlack,BF'修理柱子Else(pillarnum(pillarABC)*4000-5,700)-(pillarnum(pillarABC)*4000+8,hLevel-10),vbBlack,BF'修理柱子EndIf此外,需要注意的一点是当盘子垂直挪动时,在盘子的原地点从头绘制盘子为窗体背风景时,因为会致使一段柱子也会被覆盖成窗体背风景,所以在原地点绘制盘子为背风景以后应立刻从头绘制一次柱子。因为目前技术水平下PC机的CPU性能比较高,程序的履行时间特别短,为了获得一个适量迟缓的盘子挪动速度,在盘子挪动到下一个地点时应当暂停一个时间段。本程序中经过设置一个延缓函数以达到目的,当盘子从子路径的一端挪动到另一端时立刻调用自定义延缓函数delay(),delay()函数不过起到暂停程序履行的作用,不履行任何改变盘子现状的指令。一个delay()函数的例子以下:PrivateSubdelay()Dim

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论