飞度网
转到手机版您现在的位置: 飞度网电脑/网络正文
扫码穿越到手机

[ 字号:    来源:互联网 2006-2-27 17:03:00 ]
简言之,递归过程就是子程序自己调用自己。在编程有时采用递归的思路进行编程往往能够起到事半功倍的作用。
Win95的资源管理器具有界面直观、操作简便的特点,深受广大电脑爱好者的欢迎和喜爱。
下面就采用递归过程模拟Windows的资源管理器。
递归过程实现的思路:
由于磁盘上的目录是树形结构,而树形的节点和节点级数是不受限定的,如把目录名放入一维或多维数组中则难度较大,不易实现。如采用VB的TreeView控件的Node对象,那就比较方便了。编一子程序,给定目录,并建立当前节点,加入Node对象中,根据Dir1控件判断给定目录下是否有下级目录,如有,添加下级节点,并加入Node对象中;如无则退出子程序。即子程序的功能是:如给定目录有子目录存在,则展开当前目录求子目录。如果在给定目录展开完成后,把下级目录当成给定目录,并调用子程序进行展开,即可把给定目录下的数级子目录全部展开完毕。
利用VB提供的TreeView控件完全可以把磁盘上的目录(包括子目录)放入Node对象中,其界面具有资源管理器的特点。把磁盘上的目录放入Node对象有多种方法,应该说采用递归方法是比较简洁的。
实现的过程:
1、添加TreeView控件到窗体中:单击—“工程”—“部件”,选择MicrosoftWindowsCommonControl5.0”复选框,单击—“确定“按钮,TreeView控件即可出现在工具箱中。
2、在窗体中添加Drive、DirListBox、ImageList控件。
3、控件名及主要属性如下:
-width="23">控件及窗体名->-width="11">属性->-width="16">设置值->-width="50">备注->-width="23">Form->-width="11">Name->-width="16">Form1->-width="50">->-width="23">TreeView->-width="11">Name->-width="16">TreeView->-width="50">->-width="23">Drive->-width="11">Name->-width="16">Drive1->-width="50">获得当前电脑的盘符->-width="23">DirListBox->-width="11">Name->-width="16">Dir1->-width="50">->-width="23">ImageList->-width="11">Name->-width="16">ImageList->-width="50">给TreeView1的Node对象图标->
实现的源程序如下:->
DimnodxAsNode
PrivateSubForm_Load()
'在ImageList控件中添加一个图象。
DimimgXAsListImage
'TreeView1.ImageList=ImageList1'初始化ImageList。
SetimgX=ImageList1.ListImages.Add(,,_
LoadPicture("c:\mydocuments\072.bmp"))
TreeView1.ImageList=ImageList1'初始化ImageList。
TreeView1.LineStyle=tvwRootLines
TreeView1.Style=tvwTreelinesPlusMinusPictureText
DimDriverCountAsInteger
DimGivePathAsString
OnErrorResumeNext
'创建根节点
Setnodx=TreeView1.Nodes.Add(,,"本人电脑","本人电脑",1)
ForDriverCount=0ToDrive1.ListCount-1
Setnodx=TreeView1.Nodes.Add("本人电脑",tvwChild,_
Drive1.List(DriverCount) "\",_
Drive1.List(DriverCount),1)
GivePath=Drive1.List(DriverCount) "\"
CallSSplitNode(GivePath)
NextDriverCount
EndSub
SubSSplitNode(GivePathAsString)‘子过程
'把给定目录下的子目录全部加入Node对象中
DimSDIAsInteger
DimSDCountAsInteger
DimDString(1000)AsString
‘以下为展开给定目录的下级子目录
Dir1.Path=GivePath‘给定目录
SDCount=Dir1.ListCount‘利用Dir1控件判断是否有下级目录
IfSDCount=0ThenExitSub
‘如无同退出子程序,即为递归出口。否则会形成死循环。
ForSDI=0ToSDCount-1
DString(SDI)=Dir1.List(SDI)
Setnodx=TreeView1.Nodes.Add(GivePath,tvwChild,_
DString(SDI),FOnlyPath(DString(SDI)),1)
NextSDI
‘调用递归(子程序自己调用自己)
ForSDI=0ToSDCount-1
CallSSplitNode(DString(SDI))
NextSDI
EndSub
FunctionFOnlyPath(DStringAsString)AsString
'功能是去掉上级目录,只留下当前目录名
'DString为给定的全路径目录名
IfDString=""ThenExitFunction
DimDLengthAsInteger
DLength=Len(DString)
DimDDAsInteger
ForDD=DLengthTo1Step-1
IfMid(DString,DD,1)="\"ThenExitFor
NextDD
FOnlyPath=Mid(DString,DD 1)
EndFunction
->
本程序在Win95,VB5.0中文版下通过。
->
·分享到:
·看完后,您有任何想法或观点,请立即参与评论
·或者:向飞度网提问 留言 举报 纠错
·更多关于  递归 VB 函数 编程 的内容
 
站内搜索:
·相关评论
  还没有人评论!赶快第一个发表评论吧!
·我来评论
评论内容(必填)

注:评论内容限200字,不支持图片和链接。
您的姓名(选填): 
注:姓名所有人可见,可以填写昵称。
联系方式(选填): 
注:联系方式仅管理员可见,推荐填写电子邮箱。
评价(选填): 
不好
验证码(必填): 
验证码,看不清楚?请点击刷新验证码
版权与免责声明:
1. 凡注明来源为“飞度网”(faydo.com 以下简称为"本站")的所有作品(文章、资料),包括文字与图片,除特殊注明外均可转载,但必须保留版权信息并回链。违反上述声明者,本站将依法追究法律责任。
2. 凡未注明来源的作品(文章、资料),均转载自互联网,本站转载的目的在于传播更多信息,此类作品(文章、资料)并不代表本站观点,本网不承担此类作品侵权行为的直接责任及连带责任。
3. 如因作品内容、版权等需要同本站联系的,请使用页面底部的联系方式。
4. 本站竭力确保所刊载的作品(文章、资料)准确可靠,但不保证该等资料绝对正确可靠;对于任何因资料不确或遗漏又或因根据或依赖本站资料所作决定、行动或不行动而引致的损失或损害,本站概不负责(不论是民事侵权行为责任或合约责任或其他)。
5. 网友评论不代表本站观点。
设为首页 收藏本页 留言与建议 网站地图
©2016 飞度网 版权所有 联系方式:请邮件联系或msn联系。