【VB开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了VB开源代码-用VB编写程序实例 - 中考高考的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
vb 程序实例(一)创建
vb 应用程序是很简单的事。
有多简单?为回答这个问题,试着创建下面的 Hello
vb 和 Firstapp应用程序。
你好,Visual Basic创建
vb 应用程序有三个主要步骤:1. 创建应用程序界面2. 设置属性3. 编写
代码为了说明这一实现过程,按照以下步骤创建一个简单应用程序,该应用程序由一个文本框和一个命令按钮组成。
单击命令按钮,文本框中会出现quotHello worldquot 消息。
创建应用程序界面窗体是创建应用程序的基础。
通过使用窗体可将窗口和对话框添加到应用程序中。
也可把窗体作为项的容器,这些项是应用程序界面中的不可视部分。
例如,应用程序中可能有一个作为图形容器的窗体,而这些图形是打算在其它窗体中显示的。
建造
vb 应用程序的第一步是创建窗体,这些窗体将是应用程序界面的基础。
然后在创建的窗体上绘制构成界面的对象。
对于目前的第一个应用程序,你可使用工具箱中的两个控件。
用工具箱绘制控件1. 单击要绘制的控件的工具——此时是“文本框” 。
2. 将指针移到窗体上。
该指针变成十字线,如图 2.3 所示。
3. 将十字线放在控件的左上角所在处。
4. 拖动十字线画出适合您要的控件大小的方框 (拖动的意思是按住鼠标左键用鼠标指针移动对象) 。
5. 释放鼠标按钮。
控件出现在窗体上。
在窗体上添加控件的另一个简单方法是双击工具箱中的控件按钮。
这样会在窗体中央创建一个尺寸为缺省值的控件;然后再将该控件移到窗体中的其它位置。
调整大小、移动和锁定控件注意出现在控件四周的小矩形框称作尺寸句柄;下一步可用这些尺寸句柄调节控件尺寸。
也可用鼠标、键盘和菜单命令移动控件、锁定和解锁控件位置以及调节控件位置。
调整控件的尺寸,请按照以下步骤执行:1. 用鼠标单击要调整尺寸的控件。
选定的控件上出现尺寸句柄。
2. 将鼠标指针定位到尺寸柄上,拖动该尺寸柄直到控件达到所希望的大小为止。
角上的尺寸柄可以调整控件水平和垂直方向的大小,而边上的尺寸柄调整控件一个方向的大小。
3. 释放鼠标按钮。
- 或 -用 SHIFT 键加上和箭头键调整选定控件的尺寸。
要移动控件,请:1.用鼠标把窗体上的控件拖动到一新位置。
- 或 -用“属性”窗口改变 Top 和 Left 属性。
选定控件后,可用 CTRL 键加箭头键每次移动控件一个网格单元。
如果该网格关闭,控件每次移动一个像素。
2.要锁定所有控件位置,请:从“格式”菜单,选取“锁定控件”。
- 或 -在“窗体编辑器”工具栏上单击“锁定控件切换”按钮。
这个操作将把窗体上所有的控件锁定在当前位置,以防止已处于理想位置的控件因不小心而移动。
本操作只锁住选定窗体上的全部控件,不影响其它窗体上的控件。
这是一个切换命令,因此也可用来解锁控件位置。
创建事件过程
vb 应用程序的
代码被分为称为过程的小的
代码块。
事件过程,正如此处正要创建的一样,包含了事件发生(例如单击按钮)时要执行的
代码。
控件的事件过程由控件的实际名称(Name 属性中所指定的) 、下划线 _ 和事件名组合而成。
例如,在单击一个名为 Command1 的命令按钮时调用的 Name 事件过程,可称为 Command1_Click 事件过程。
要创建事件过程,请按照以下步骤执行:1. 在“对象”列表框中,选定活动窗体中的一个对象名(活动窗体是指当前有焦点的窗体) 。
在这一例子中,选定命令按钮 Command1。
2. 在“过程”列表框中,选择指定对象的事件名。
此时 Click 过程已经被选定,因为它是命令按钮的缺省过程。
注意,这时事件过程的模板已经显示在“
代码”窗口中。
3. 在 Sub 和 End Sub 语句之间输入下面的
代码:Text1.Text quotHello worldquot这个事件过程应该是:Private Sub Command1_Click Text1.Text quotHello worldquotEnd Sub值得注意的是,此处
代码只简单改变了控件 Text1 的 Text 属性,读入quotHello worldquot。
这个例子的语法采用 object. property 的格式,其中 Text1 是对象,Text 是属性。
响应应用程序运行中发生的事件时,可以用这种语法来改变任何窗体或控件的属性设置值。
详细信息 关于创建其它类型过程的详细信息,请参阅第五章“编程基础”中的“过程概述”一节。
运行应用程序为了运行应用程序,可以从“运行”菜单中选择“启动” ,或者单击工具栏中的“启动”按钮,或按 F5 键。
单击刚才在窗体上创建的命令按钮,文本框中就会显示 quotHello worldquot。
Firstapp 示例应用程序 由于
vb 提供了远比本例应用程序丰富得多的工具, 因此马上可以使用许多其的特性来管理和配制应用程序。
复习示例应用程序是学习
vb 的极好方法。
下述示例展示了用
vb 编制实用的应用程序是多么的轻而易举。
应用
程序 Firstapp 演示了如何使用 data 控件和 grid 控件显示取自数据库的信息表。
vb 使得从应用程序内部到数据库的访问非常地容易。
数据控件提供了在数据库的记录集中漫游的功能,以及使得在 grid 控件中显示的记录与数据集中的位置同步的能力。
本例包含一个数据控件、一个 MSFlexGrid 控件、一个列表框控件和两个命令按钮。
网格显示了从Northwind 数据库检索到的产品的信息表。
当使用数据控件上的定位按钮选定网格的一项时,被选中的产品名便显示在数据控件上。
还可以双击网格中当前选择位置,在列表框控件的“购书单”中添加当前选择的书名。
用 AddItem 方法可以添加列表框的信息。
方法是作用于特定对象(本例中为 ListBox 对象)的
vb函数。
指定方法的语法 object.method 与设置属性的语法 object.property 类似。
AddItem 方法可以在程序运行时动态地添加列表框的内容。
相反,Clear 方法用于清除列表框的全部信息。
详细信息 关于方法的详细内容,请参阅第三章“窗体、控件和菜单”中的“属性、方法和事件概述”一节。
创建工程 创建工程首先要从“文件”菜单中选择“新建工程” ,然后从“新建工程”对话框中选定“标准EXE” (首次启动
vb 时将会显示“新建工程”对话框) 。
vb 创建一个新的工程并显示一个新的窗体。
用一个数据控件、一个 MSFlexGrid 控件、一个列表框控件以及两个命令按钮画出了应用程序的界面。
MSFlexGrid 控件不在缺省的工具箱内,因此必须添加:要添加控件到工具箱,请按照以下步骤执行:1. 选定工具箱的上下文菜单中的“部件” (可以在工具箱窗口内部单击右键显示上下文菜单。
。
)“部件”对话框被显示。
2. 找到“控件”列表框中的“MSFlexGrid Microsoft Flex Grid 6.0”项,然后选中其左边的复选框。
3. 单击“确定”按钮。
在工具箱中有了 MSFlexGrid 控件的图标。
使用工具箱在窗体上画出一个数据控件、 一个 MSFlexGrid 控件、一个
列表框控件和两个命令按钮。
如果您不记得如何绘制,请参阅本章前面的quotCreatingthe Interfacequot。
设置属性根据下表在属性窗口中设置对象的属性,其余的属性均使用缺省值。
数据控件的 DatabaseName 属性必须包含数据库的实际路径。
按照缺省规定,Biblio.mdb 数据库的按钮与
vb 安装在同一个目录下。
在属性窗口中选择 DatabaseName 属性时,可以单击该属性右侧的按钮显示标准的“打开文件”对话框浏览文件。
设置完 DatabaseName 属性后,属性窗口中 将的 RecordSource 属性将包含选中的数据库中的表或记录集的清单。
DataGrid 控件的 DataSource属性设置为 Data1,将自动地把网格和数据控制链接起来。
编写事件
代码 程 序 所 有 的 代 码 包 含 在 Command1_Click 、 Command2_Click 、 Data1_Reposition 和DataGrid1_DblClick 事件过程中。
双击窗体或控件显示
代码窗口,然后输入各事件过程的
代码。
将以下
代码添加到 Command1_Click 事件过程中,用于单击按钮时清除列表框:Private Sub Command1_Click List1.Clear 清除列表框。
End Sub以上语句调用了列表框 List1 的 Clear 方法,Clear 方法删除该列表框的内容。
将以下
代码添加到 Command2_Click 事件过程中,用于从内存中卸载窗体并终止应用程序:Private Sub Command2_Click Unload Form1End 终止应用程序End Sub以上过程的第一条语句调用窗体的 Unload 事件。
如果需要在终止程序时执行一个功能(例如保存文件) ,可以把
代码放到窗体的 Unload 事件过程中。
第二条语句调用 End 函数终止程序。
将以下
代码添加到 Data1_Reposition 事件过程中,用于每当选择一个记录时更新标题:Private Sub Data1_Reposition Data1.Caption Data1.RecordsetquotTitlequotEnd Sub以上语句将右边的值 (数据控件的记录集的 Title 字段) 赋给左边的属性 (数据控件对象的 Caption属性) 。
将以下
代码添加到 DataGrid_DblClick 事件过程中, 用于当双击一个选定的行时向列表框添加信息。
Private Sub DataGrid1_DblClick List1.AddItem Data1.RecordsetquotTitlequotEnd Sub以上语句调用列表框 List1 的 AddItem 方法。
添加到列表框中的文本被包含在该方法的参数中 (此时为数据控件的记录集的 title 字段) 。
将一个值传递给参数类似于给属性赋值,与赋值语句不同的是不需要用等号。
保存工程 从“文件”菜单中选取“保存工程”命令来结束本次创建应用程序的
工作。
vb 将分别提示保存窗体和保存工程。
可以将工程命名为 “书店销售清单” quotBookstore Shopping List.quot。
Windows 95 和Windows NT 都允许使用长达 255 个字符的文件名而且可以包含空格。
旧版的 MicrosoftWindows只允许八个字符的文件名外加三个字符的扩展名。
增强应用程序 这样第一个
vb 应用程序就完成了:这是一个功能简单却很有用的程序。
可以以此为基础在自己的应用程序中添加新的功能,用自己的数据替换 Biblio.mdb。
当然,要使本程序真正实用,还要添加基本的保存或打印列表框内容的功能、添加更多的信息如价格、是否有货,甚至可以收集信用卡的信息和通过 Internet 传送订单。
通过继续阅读《程序员指南》的其余部分将找到所有有关这些功能的例子和其它更多的知识。
用
VB 编写 Hanoi 塔问题动态演示程序1 引言 在
计算机算法设计中,使用递归技术往往使函数的定义和算法的描述简捷且易于理解。
有些数据结构如二叉树等由于其本身固有的递归特性,特别适合用递归的形式来描述。
还有一些问题,虽然其本身并没有明显的递归结构,但用递归技术来求解使设计出的算法简洁、易懂。
因此深入掌握递归技术在算法设计过程中可以设计出更加有效的算法1。
简单地说,递归就是用自己定义自己。
使用递归方法构造算法的基本思路是:当求解规模为 n的问题时,先将其分解成若干个规模较小的与原问题具有相同特征的子问题,并找出子问题与原问题之间的组合关系,最后根据具体问题构造出递归算法。
递归算法的执行过程分“递推”和“回归”两个阶段。
在递推阶段,把较复杂问题(如:规模为 n)的求解推理至较原问题简单一些的
问题(如规模为 n-1)的求解;在回归阶段,把递推结束时所得到的解,逐级返回,依次得到稍复杂问题的解,最终得到原问题的解2。
Hanoi 塔问题是一个典型的适合于利用递归技术得到简洁算法的例子。
Hanoi 塔问题源自约 19世纪末在欧洲出现的一种游戏, 游戏中首先在一块铜板上放置三根柱子,在第一根柱子上自上而下、由小到大顺序串着 64 个盘子。
游戏的目标是最后将所有盘子从第一根柱子上移到第三根柱子上,移动过程中可以用第二根柱子过渡。
游戏规定一次只能移动一个盘子,并且任何时刻不允许大盘放在小盘的上面。
现在就给出关于 Hanoi 塔问题的程序,让其将 Hanoi 塔问题的执行过程动态
演示出来,以帮助读者加深理解递归技术。
2 算法
设计 我们先利用递归技术对该问题进行算法设计。
我们将三根柱子分别标号为 A、B、C,目标是要将 n 个盘子从 A 柱子移动到 C 柱子。
该问题可以设计如下的递归算法:第一步 将 A 柱子上 n-1 个盘子借助 C 柱子移动到 B 柱子上;第二步 将 A 柱子上剩余的第 n 个盘子移动到 C 柱子上;第三步 将 B 柱子上的 n-1 个盘子借助 A 柱子移动到 C 柱子上。
对于第一步和第三步, 我们又可以利用类似的方法继续将其求解过程设计为一个规模为 n-1 的 Hanoi塔递归算法。
3 递归算法动态演示过程的程序实现对于该算法的程序实现有两个关键的难点, 其一是初始化部分如何将三根柱子和 n 个盘子按照问题要求在屏幕上绘制出来;其二是盘子移动过程的图形实现。
3.1 form 窗体设计及程序初始化首先在 form 窗体中添加三个命令按钮,如图 1 所示:图 1 初始界面在开始执行 Hanoi 塔问题求解过程之前,需要将三根柱子绘制在屏幕上,还需要接收用户指定的盘子数及将盘子正确显示至 A 柱子上。
在本程序中接收盘子数是利用 InputBox 函数接收保存至全局变量 number 中,用实心矩形代表盘子。
这一部分的初始化工作在准备按钮的 click 事件过程中实现,其核心
代码如下: Dim i As Integer 设置 Form 窗体属性 Form1.Caption quot准备...quot Form1.Cls 设置三个柱子的标记 CurrentX 4000 CurrentY hLevel 61 Form1.FontSize 16 Form1.ForeColor vbRed Form1.FontBold True Print quotAquot CurrentX 8000 CurrentY hLevel 61 Print quotBquot CurrentX 12000 CurrentY hLevel 61 Print quotCquot Form1.ForeColor ampH80000012 Form1.FontSize 10 Form1.FontBold False 画底线 Form1.Line 0 hLevel-15360 hLevel 100 vbGreen BF 画三根柱子A 柱子的柱底坐标是400010300 纵坐标减 10 只是为了显示时看的效果更好一些, 其实是不应该减的, 减了后柱子底端纵坐标与底线上沿纵坐标就不一致了,但屏幕视觉是一致的 Form1.Line 3995 700-4005 hLevel - 10 vbBlack BF Form1.Line 7995 700-8005 hLevel - 10 vbBlack BF Form1.Line 11995 700-12008 hLevel - 10 vbBlack BF number ValInputBoxquot请输入盘子数:quot quot输入数据quot quot3quot Form1.Caption quot共有quot amp number amp quot个盘子quot 盘子宽 400i高度 200 相邻盘子之间的高度差设置为 210,如果设置为相差 200 的话,当把上面一个盘子移走时两个盘子重叠部分无法重新修复 For i 1 To number Form1.Line 4000 - i 400 / 2 hLevel - number 1 - i 210-4000 i 400 / 2hLevel - number - i 210 - 10 BF Next i baseCoordinateY1 hLevel - number 210 baseCoordinateY2 hLevelbaseCoordinateY3 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 值不能设置的过大,如果设置的太大,则盘子移动过程中将会出现不连续的移动效果。
盘子移动过程程序实现的核心
代码如下:Dim i As Integer j As Integer k As Integer i、k 表示纵坐标,j 表示横坐标Form1.Caption quot汉诺塔问题-第quot amp n amp quot个盘子正在移动...quot 向上移动到 first 柱子顶端For i baseCoordinateYpillarnumgetone To 600 - 210 Step -stepC 把矩形本次移动前的图形擦掉Form1.Line pillarnumgetone 4000 - n 400 / 2 i-pillarnumgetone 4000 n 400 / 2 i 200 Form1.BackColor BF fixpillar getone Form1.Line pillarnumgetone 4000 - n 400 / 2 i - stepC-pillarnumgetone 4000 n 400 / 2 i - stepC 200 BF delay Next i 当前 i 600-200-stepC,此时 i 值表示盘子的当前纵坐标 向左、右平移到 third 柱子顶端 If pillarnumgetone lt pillarnumputone Then 向右移 For j pillarnumgetone 4000 - n 400 / 2 To pillarnumputone 4000 - n 400 /2 - stepC Step stepC Form1.Line j i-j n 400 i 200 Form1.BackColor BF Form1.Line j stepC i-j stepC n 400 i 200 BF delay Next j Else 向左移 For j pillarnumgetone 4000 - n 400 / 2 To pillarnumputone 4000 - n 400 /2 stepC Step -stepC Form1.Line j i-j n 400 i 200 Form1.BackColor BF Form1.Line j - stepC i-j - stepC n 400 i 200 BF delay Next j End If 向下移动到 third 柱子底端 For k i To baseCoordinateYpillarnumputone - 210 - stepC Step stepC 把矩形本次移动前的图形擦掉 Form1.Line pillarnumputone 4000 - n 400 / 2 k-pillarnumputone 4000 n 400 / 2 k 200 Form1.BackColor BF fixpillar putone Form1.Line pillarnumputone 4000 - n 400 / 2 k stepC-pillarnumputone 4000 n 400 / 2 k stepC 200 BF delay Next k 最后在柱子底端再补画一次高度为 210 的矩形 因为 k 循环最后一次执行循环体时,k 值未必正好等于循环终值baseCoordinateYpillarnumputone - 210 - stepC 所以要补一个上沿纵坐标为 baseCoordinateYpillarnumputone - 210 - stepC 矩形 Form1.Line pillarnumputone 4000 - n 400 / 2 k-pillarnumputone 4000 n 400/ 2 k 200 Form1.BackColor BF fixpillar putone Form1.Line pillarnumputone 4000 - n 400 / 2 baseCoordinateYpillarnumputone -210-pillarnumputone 4000 n 400 / 2 baseCoordinateYpillarnumputone - 210 200 BF 更新各柱子最面一个盘子上沿的纵坐标 baseCoordinateYpillarnumgetone baseCoordinateYpillarnumgetone 210 baseCoordinateYpillarnumputone baseCoordinateYpillarnumputone - 210End SubPrivate Function pillarnumch As String As Integer pillarnum Ascch 1 - AscquotAquotEnd FunctionPrivate Sub fixpillarpillarABC As String 纵坐标减 10 只是为了显示时看的效果更好一些, 其实是不应该减的, 减了后柱子底端纵坐标与底线上沿纵坐标就不一致了 If pillarnumpillarABC lt 3 Then Form1.Line pillarnumpillarABC 4000 - 5 700-pillarnumpillarABC 4000 5 hLevel -10 vbBlack BF 修补柱子 Else Form1.Line pillarnumpillarABC 4000 - 5 700-pillarnumpillarABC 4000 8 hLevel -10 vbBlack BF 修补柱子End If另外,需要注意的一点是当盘子垂直移动时,在盘子的原位置重新绘制盘子为窗体背景色时,由于会导致一段柱子也会被覆盖成窗体背景色,因此在原位置绘制盘子为背景色之后应立即重新绘制一次柱子。
由于目前技术水平下 PC 机的 CPU 性能比较高,程序的执行时间非常短,为了得到一个适度缓慢的盘子移动速度,在盘子移动到下一个位置时应该暂停一个时间段。
本程序中通过设置.