版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
vb程序实例(一)创建vb应用程序是很简单的事。有多简单?为回答这个问题,试着创建下面的Hello,vb和Firstapp应用程序。你好,VisualBasic创建vb应用程序有三个主要步骤:创建应用程序界面设置属性编写代码为了说明这一实现过程,按照以下步骤创建一个简单应用程序,该应用程序由一个文本框和一个命令按钮组成。单击命令按钮,文本框中会出现"Hello,world!"消息。创建应用程序界面窗体是创建应用程序的基础。通过使用窗体可将窗口和对话框添加到应用程序中。也可把窗体作为项的容器,这些项是应用程序界面中的不可视部分。例如,应用程序中可能有一个作为图形容器的窗体,而这些图形是打算在其它窗体中显示的。建造vb应用程序的第一步是创建窗体,这些窗体将是应用程序界面的基础。然后在创建的窗体上绘制构成界面的对象。对于目前的第一个应用程序,你可使用工具箱中的两个控件。用工具箱绘制控件单击要绘制的控件的工具一一此时是“文本框”。将指针移到窗体上。该指针变成十字线,如图2.3所示。将十字线放在控件的左上角所在处。拖动十字线画出适合您要的控件大小的方框(拖动的意思是按住鼠标左键用鼠标指针移动对象)。释放鼠标按钮。控件出现在窗体上。在窗体上添加控件的另一个简单方法是双击工具箱中的控件按钮。这样会在窗体中央创建一个尺寸为缺省值的控件;然后再将该控件移到窗体中的其它位置。调整大小、移动和锁定控件注意出现在控件四周的小矩形框称作尺寸句柄;下一步可用这些尺寸句柄调节控件尺寸。也可用鼠标、键盘和菜单命令移动控件、锁定和解锁控件位置以及调节控件位置。调整控件的尺寸,请按照以下步骤执行:用鼠标单击要调整尺寸的控件。选定的控件上出现尺寸句柄。将鼠标指针定位到尺寸柄上,拖动该尺寸柄直到控件达到所希望的大小为止。角上的尺寸柄可以调整控件水平和垂直方向的大小,而边上的尺寸柄调整控件一个方向的大小。释放鼠标按钮。-或-用SHIFT键加上和箭头键调整选定控件的尺寸。要移动控件,请:用鼠标把窗体上的控件拖动到一新位置。-或-用“属性”窗口改变Top和Left属性。选定控件后,可用CTRL键加箭头键每次移动控件一个网格单元。如果该网格关闭,控件每次移动一个像素。要锁定所有控件位置,请:从“格式”菜单,选取“锁定控件”。-或-在“窗体编辑器”工具栏上单击“锁定控件切换”按钮。这个操作将把窗体上所有的控件锁定在当前位置,以防止已处于理想位置的控件因不小心而移动。本操作只锁住选定窗体上的全部控件,不影响其它窗体上的控件。这是一个切换命令,因此也可用来解锁控件位置。创建事件过程vb应用程序的代码被分为称为过程的小的代码块。事件过程,正如此处正要创建的一样,包含了事件发生(例如单击按钮)时要执行的代码。控件的事件过程由控件的实际名称(Name属性中所指定的)、下划线(_)和事件名组合而成。例如,在单击一个名为Commandl的命令按钮时调用的Name事件过程,可称为Command1_Click事件过程。要创建事件过程,请按照以下步骤执行:在“对象”列表框中,选定活动窗体中的一个对象名(活动窗体是指当前有焦点的窗体)。在这一例子中,选定命令按钮Commandl。在“过程”列表框中,选择指定对象的事件名。此时Click过程已经被选定,因为它是命令按钮的缺省过程。注意,这时事件过程的模板已经显示在“代码”窗口中。在Sub和EndSub语句之间输入下面的代码:Textl.Text="Hello,world!"这个事件过程应该是:PrivateSubCommand1_Click()Text1.Text="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函数。指定方法的语法(object.method)与设置属性的语法(perty)类似。AddItem方法可以在程序运行时动态地添加列表框的内容。相反,Clear方法用于清除列表框的全部信息。详细信息关于方法的详细内容,请参阅第三章“窗体、控件和菜单”中的“属性、方法和事件概述”一节。创建工程创建工程首先要从“文件”菜单中选择“新建工程”,然后从“新建工程”对话框中选定“标准EXE"(首次启动vb时将会显示“新建工程”对话框)。vb创建一个新的工程并显示一个新的窗体。用一个数据控件、一个MSFlexGrid控件、一个列表框控件以及两个命令按钮画出了应用程序的界面。MSFlexGrid控件不在缺省的工具箱内,因此必须添加:要添加控件到工具箱,请按照以下步骤执行:选定工具箱的上下文菜单中的“部件”(可以在工具箱窗口内部单击右键显示上下文菜单。)。“部件”对话框被显示。找到“控件”列表框中的“MSFlexGrid(MicrosoftFlexGrid6.0)”项,然后选中其左边的复选框。单击“确定”按钮。在工具箱中有了MSFlexGrid控件的图标。使用工具箱在窗体上画出一个数据控件、一个MSFlexGrid控件、一个列表框控件和两个命令按钮。如果您不记得如何绘制,请参阅本章前面的"CreatingtheInterface"o设置属性根据下表在属性窗口中设置对象的属性,其余的属性均使用缺省值。数据控件的DatabaseName属性必须包含数据库的实际路径。按照缺省规定,Biblio.mdb数据库的按钮与vb安装在同一个目录下。在属性窗口中选择DatabaseName属性时,可以单击该属性右侧的按钮显示标准的“打开文件”对话框浏览文件。设置完DatabaseName属性后,属性窗口中的RecordSource属性将包含选中的数据库中的表或记录集的清单。将DataGrid控件的DataSource属性设置为Data1,将自动地把网格和数据控制链接起来。编写事件代码程序所有的代码包含在Command1_Click、Command2_Click、Data1_Reposition和DataGrid1_DblClick事件过程中。双击窗体或控件显示代码窗口,然后输入各事件过程的代码。将以下代码添加到Command1_Click事件过程中,用于单击按钮时清除列表框:PrivateSubCommand1_Click()List1.Clear'清除列表框。EndSub以上语句调用了列表框List1的Clear方法,Clear方法删除该列表框的内容。将以下代码添加到Command2_Click事件过程中,用于从内存中卸载窗体并终止应用程序:PrivateSubCommand2_Click()UnloadForm1End'终止应用程序EndSub以上过程的第一条语句调用窗体的Unload事件。如果需要在终止程序时执行一个功能(例如保存文件),可以把代码放到窗体的Unload事件过程中。第二条语句调用End函数终止程序。将以下代码添加到Data1_Reposition事件过程中,用于每当选择一个记录时更新标题:PrivateSubData1_Reposition()Data1.Caption=Data1.Recordset("Title")EndSub以上语句将右边的值(数据控件的记录集的Title字段)赋给左边的属性(数据控件对象的Caption属性)。将以下代码添加到DataGrid_DblClick事件过程中,用于当双击一个选定的行时向列表框添加信息。PrivateSubDataGrid1_DblClick()List1.AddItemData1.Recordset("Title")EndSub以上语句调用列表框List1的AddItem方法。添加到列表框中的文本被包含在该方法的参数中(此时为数据控件的记录集的title字段)。将一个值传递给参数类似于给属性赋值,与赋值语句不同的是不需要用等号。保存工程从“文件”菜单中选取“保存工程”命令来结束本次创建应用程序的工作。vb将分别提示保存窗体和保存工程。可以将工程命名为“书店销售清单”("BookstoreShoppingList.")oWindows95和WindowsNT都允许使用长达255个字符的文件名而且可以包含空格。旧版的MicrosoftWindows只允许八个字符的文件名外加三个字符的扩展名。增强应用程序这样第一个vb应用程序就完成了:这是一个功能简单却很有用的程序。可以以此为基础在自己的应用程序中添加新的功能,用自己的数据替换Biblio.mdb。当然,要使本程序真正实用,还要添加基本的保存或打印列表框内容的功能、添加更多的信息,如价格、是否有货,甚至可以收集信用卡的信息和通过Internet传送订单。通过继续阅读《程序员指南》的其余部分将找到所有有关这些功能的例子和其它更多的知识。用VB编写Hanoi塔问题动态演示程序1引言在计算机算法设计中,使用递归技术往往使函数的定义和算法的描述简捷且易于理解。有些数据结构如二叉树等由于其本身固有的递归特性,特别适合用递归的形式来描述。还有一些问题,虽然其本身并没有明显的递归结构,但用递归技术来求解使设计出的算法简洁、易懂。因此深入掌握递归技术在算法设计过程中可以设计出更加有效的算法[1]。简单地说,递归就是用自己定义自己。使用递归方法构造算法的基本思路是:当求解规模为n的问题时,先将其分解成若十个规模较小的与原问题具有相同特征的子问题,并找出子问题与原问题之间的组合关系,最后根据具体问题构造出递归算法。递归算法的执行过程分“递推”和“回归”两个阶段。在递推阶段,把较复杂问题(如:规模为!)的求解推理至较原问题简单一些的问题(如规模为n-1)的求解;在回归阶段,把递推结束时所得到的解,逐级返回,依次得到稍复杂问题的解,最终得到原问题的解[2]。Hanoi塔问题是一个典型的适合于利用递归技术得到简洁算法的例子。Hanoi塔问题源自约19世纪末在欧洲出现的一种游戏,游戏中首先在一块铜板上放置三根柱子,在第一根柱子上自上而下、由小到大顺序串着64个盘子。游戏的目标是最后将所有盘子从第一根柱子上移到第三根柱子上,移动过程中可以用第二根柱子过渡。游戏规定一次只能移动一个盘子,并且任何时刻不允许大盘放在小盘的上面。现在就给出关于Hanoi塔问题的程序,让其将Hanoi塔问题的执行过程动态演示出来,以帮助读者加深理解递归技术。2算法设计我们先利用递归技术对该问题进行算法设计。我们将三根柱子分别标号为A、B、。,目标是要将n个盘子从A柱子移动到C柱子。该问题可以设计如下的递归算法:第一步将A柱子上n-1个盘子借助C柱子移动到B柱子上;第二步将A柱子上剩余的第n个盘子移动到C柱子上;第三步将B柱子上的n-1个盘子借助A柱子移动到C柱子上。对于第一步和第三步,我们又可以利用类似的方法继续将其求解过程设计为一个规模为n-1的Hanoi塔递归算法。3递归算法动态演示过程的程序实现对于该算法的程序实现有两个关键的难点,其一是初始化部分如何将三根柱子和n个盘子按照问题要求在屏幕上绘制出来;其二是盘子移动过程的图形实现。3.1form窗体设计及程序初始化首先在form窗体中添加三个命令按钮,如图1所示:图1初始界面在开始执行Hanoi塔问题求解过程之前,需要将三根柱子绘制在屏幕上,还需要接收用户指定的盘子数及将盘子正确显示至A柱子上。在本程序中接收盘子数是利用InputBox函数接收保存至全局变量number中,用实心矩形代表盘子。这一部分的初始化工作在准备按钮的click事件过程中实现,其核心代码如下:DimiAsInteger'设置Form窗体属性Form1.Caption="准备..."Form1.Cls'设置三个柱子的标记CurrentX=4000CurrentY=hLevel+61Form1.FontSize=16Form1.ForeColor=vbRedForm1.FontBold=TruePrint"A"CurrentX=8000CurrentY=hLevel+61Print"B"CurrentX=12000CurrentY=hLevel+61Print"C"Form1.ForeColor=&H80000012Form1.FontSize=10Form1.FontBold=False'画底线Form1.Line(0,hLevel)-(15360,hLevel+100),vbGreen,BF'画三根柱子,A柱子的柱底坐标是(4000,10300)'纵坐标减10只是为了显示时看的效果更好一些,其实是不应该减的,减了后柱子底端纵坐标与底线上沿纵坐标就不一致了,但屏幕视觉是一致的Form1.Line(3995,700)-(4005,hLevel-10),vbBlack,BFForm1.Line(7995,700)-(8005,hLevel-10),vbBlack,BFForm1.Line(11995,700)-(12008,hLevel-10),vbBlack,BFnumber=Val(InputBox('请输入盘子数:”,”输入数据","3"))Form1.Caption="共有"&number&"个盘子"'盘子宽400*i,高度200'相邻盘子之间的高度差设置为210,如果设置为相差200的话,当把上面一个盘子移走时两个盘子重叠部分无法重新修复Fori=1TonumberForm1.Line((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)=hLevel3.2盘子移动的实现盘子的移动过程主要有两种类型的移动,一种是垂直移动(包括自上而下和自下而上),另一种是水平移动(包括从左至右和从右至左)。盘子移动过程程序实现的主要思想是将每一次盘子从原位置移动到目标位置的路线分割成足够多的子路径,每个子路径的距离足够小,盘子从某子路径一端移动至另一端通过两个步骤来实现:第一步将原位置上的盘子颜色设置为form窗体背景色Form1.BackColor,以达到将盘子从原位置移开的显示效果;第二步在盘子将要到达的新位置重新绘制该盘子,从而达到盘子移动到另一端的显示效果。例如某个用Form1.Line(4000,i)-(4000+400),i+200)语句绘制的长为400像素、宽为200像素的盘子需要从矩形左上角坐标为(4000,i)的位置垂直向上移动到下一位置,则可能将该矩形在原位置重新绘制成窗体背景色,在矩形左上角坐标为(4000,i-stepC)位置重新绘制一个矩形来达到将该矩形从位置(4000,i)移动到位置(4000,i-stepC)的目的,其中stepC是移动步长,也即子路径的长度。stepC值不能设置的过大,如果设置的太大,则盘子移动过程中将会出现不连续的移动效果。盘子移动过程程序实现的核心代码如下:DimiAsInteger,jAsInteger,kAsInteger'、k表示纵坐标,j表示横坐标Form1.Caption="汉诺塔问题-第"&n&”个盘子正在移动...”'向上移动到first柱子顶端Fori=baseCoordinateY(pillarnum(getone))To600-210Step-stepC'把矩形本次移动前的图形擦掉Forml.Line((pillarnum(getone)*4000-(n*400)/2),i)-((pillarnum(getone)*4000+(n*400)/2),i+200),Form1.BackColor,BFfixpillar(getone)Form1.Line((pillarnum(getone)*4000-(n*400)/2),i-stepC)-((pillarnum(getone)*4000+(n*400)/2),i-stepC+200),,BFdelayNexti'当前i=600-200-stepC,此时i值表示盘子的当前纵坐标'向左、右平移到third柱子顶端Ifpillarnum(getone)<pillarnum(putone)Then'向右移Forj=(pillarnum(getone)*4000-(n*400)/2)To(pillarnum(putone)*4000-(n*400)/2)-stepCStepstepCForml.Line(j,i)-(j+n*400,i+200),Forml.BackColor,BFForml.Line(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-stepCForml.Line(j,i)-(j+n*400,i+200),Forml.BackColor,BFForml.Line(j-stepC,i)-(j-stepC+n*400,i+200),,BFdelayNextjEndIf'向下移动到third柱子底端Fork=iTobaseCoordinateY(pillarnum(putone))-2l0-stepCStepstepC'把矩形本次移动前的图形擦掉Forml.Line((pillarnum(putone)*4000-(n*400)/2),k)-((pillarnum(putone)*4000+(n*400)/2),k+200),Forml.BackColor,BFfixpillar(putone)Forml.Line((pillarnum(putone)*4000-(n*400)/2),k+stepC)-((pillarnum(putone)*4000+(n*400)/2),k+stepC+200),,BFdelayNextk'最后在柱子底端再补画一次高度为2l0的矩形,'因为k循环最后一次执行循环体时,k值未必正好等于循环终值baseCoordinateY(pillarnum(putone))-2l0-stepC,'所以要补一个上沿纵坐标为baseCoordinateY(pillarnum(putone))-2l0-stepC矩形Forml.Line((pillarnum(putone)*4000-(n*400)/2),k)-((pillarnum(putone)*4000+(n*400)/2),k+200),Forml.BackColor,BFfixpillar(putone)Forml.Line((pillarnum(putone)*4000-(n*400)/2),baseCoordinateY(pillarnum(putone))-2l0)-((pillarnum(putone)*4000+(n*400)/2),baseCoordinateY(pillarnum(putone))-2l0+200),,BF'更新各柱子最面一个盘子上沿的纵坐标baseCoordinateY(pillarnum(getone))=baseCoordinateY(pillarnum(getone))+2l0
baseCoordinateY(pillarnum(putone))=baseCoordinateY(pillarnum(putone))-210EndSubPrivateFunctionpillarnum(chAsString)AsIntegerpillarnum=Asc(ch)+1-Asc("A")EndFunctionPrivateSubfixpillar(pillarABCAsString)'纵坐标减10只是为了显示时看的效果更好一些,其实是不应该减的,减了后柱子底端纵坐标与底线上沿纵坐标就不一致了Ifpillarnum(pillarABC)<3ThenForm1.Line(pillarnum(pillarABC)*4000-5,700)-(pillarnum(pillarABC)*4000+5,hLevel-10),vbBlack,BF'修补柱子ElseForm1.Line(pillarnum(pillarABC)*4000-5,700)-(pillarnum(pillarABC)*4000+8,hLevel-10),vbBlack,BF修补柱子EndIf另外,需要注意的一点是当盘子垂直移动时,在盘子的原位置重新绘制盘子为窗体背景色时,由于会导致一段柱子也会被覆盖成窗体背景色,因此在原位置绘制盘子为背景色之后应立即重新绘制一次柱子。由于目前技术水平下PC机的CPU性能比较高,程序的执行时间非常短,为了得到一个适度缓慢的盘子移动速度,在盘子移动到下一个位置时应该暂停一个时间段。本程序中通过设置一个延迟函数以达到目的,当盘子从子路径的一端移动到另一端时立即调用自定义延迟函数delay(),delay()函数只是起到暂停程序执行的作用,不执行任何改变盘子现状的指令。一个delay()函数的例子如下:PrivateSubdelay()DimttAsDoublett
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业版股权质押权责明确协议样本一
- 科技驱动未来
- 元宵节数字营销解读
- 2025年度拆除工程噪音污染控制合同4篇
- 2025年度厂房设备租赁与绿色制造合同范本4篇
- 《中科院化学课件:不对称催化反应及其在药物合成中的应用》
- 二零二五年度腻子材料批发与零售合同3篇
- 2025年度厂区装卸工劳动保障政策宣传合同4篇
- 2025年度绿色环保型老旧厂房拆除及重建一体化工程合同4篇
- 2025年度高端医疗器械研发与生产合同4篇
- 平面向量及其应用试题及答案
- 2024高考复习必背英语词汇3500单词
- 消防控制室值班服务人员培训方案
- 《贵州旅游介绍》课件2
- 2024年中职单招(护理)专业综合知识考试题库(含答案)
- 无人机应用平台实施方案
- 挪用公款还款协议书范本
- 事业单位工作人员年度考核登记表(医生个人总结)
- 盾构隧道施工数字化与智能化系统集成
- 【企业盈利能力探析文献综述2400字】
- 2019年医养结合项目商业计划书
评论
0/150
提交评论