VB应用程序中实现“查找和替换”功能_第1页
VB应用程序中实现“查找和替换”功能_第2页
VB应用程序中实现“查找和替换”功能_第3页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、VB应用程序中实现“查找和替换”功能VB应用程序中实现查找和替换功能下载本文源代码一、前言尽管VisualBasic并不是我最喜欢的开发工具,但我喜欢它简单而又丰富的库集。每当开发一个需要处理大量文本数据的应用程序时,需要具有拼写错误纠正功能,例如,微软的Word程序,当运行拼写检查时,将提供给你一个改正错误的机会(尽管是建议),它同时也提供了查找替换工具,用以进行用户定义的单词替换。这篇文章我将解释如何在VB应用程序中实现查找替换功能。二、前提条件在解释代码的时候,我假定读者朋友们已经有使用VisualBasic的经验,熟悉VisualStudio开发环境中各种内置的控件及库函数(尽管我使用

2、的不多)。我已经尝试着尽可能地简化程序代码,用不了多久你就可以明白程序的逻辑。如果想对一些库函数(如参数,语法)进一步详细地理解,可以参阅MSDN图一是程序运行后的效果图:图一、程序实现查找替换功能时的效果图三、基础工作首先创建一个标准的EXE类型的VB工程,将默认窗体更名为frmMainForm,在默认窗体上增添一个菜单,具体设置如下(符号用于加速键,单词mnu后的名字用来说明菜单项的名字(在代码中使用)Edit技搜索操作系统杀聊天软件网ASPJJSPVPHPXVBVJavaCMySQLSOracleDFlashDFireworksFPhotoshopCFreeHandIDirectorA视

3、频处理产品库推荐笔记本数码相机DV摄像机CPU主板打印机.FindandReplacemnuFindandreplaceExitmnuExit向默认窗体添力口一个TextBox控件,命名为txtClientArea。使用鼠标调整控件位置和尺寸,使它覆盖窗体的整个客户区,在属性窗口将这个TextBox控件的MultiLine属性设置为True。使用ProjectAddForm菜单向工程中添加另外一个窗体,将这个窗体命名为frmFindReplace,并在属性窗口中将它的BorderStyle属性设置为4-FixedToolWindow。现在,添加两个TextBox控件,并分别命名为txtSear

4、chTerm和txtReplaceWithString。添加一个复选框,命名为chkCaseSense。最后,添加一个命令按钮控件,命名为cmdReplac&在frmMainForm窗体中添加如下代码:PrivateSubmnuExit_Click()EndEndSubPrivateSubmnuFindandreplace_Click()frmFindReplace.FindnReplacetxtClientAreaEndSub从上面代码中可以非常明显地看出,当点击Exit菜单时,我们想终结应用程序,当点击FindandReplace菜单时,想通过共用接口frmFindReplace及

5、FindnReplace()方法来激活frmFindReplace窗体。这个公用的接口使查找算法具有普遍性,使用这个接口时,需要提供一个TextBox作为参数(在这里面,搜寻将被执行)。通过使用你白己的TextBox的名字来代替txtClientArea的名字,可以在多个文本框内执行查找替换功能,而不用更改代码。查找和替换的实现代码主要是在frmFindReplace窗体内,这个模块的代码如下:'Thisvariableisusedformdringthealgorithmgeneric.DimtxtClientAsTextBox'Thismethodisthepublicin

6、terfacetoSnRfunctionality.PublicSubFindnReplace(ByRefTbAsTextBox)SettxtClient=TbMe.Show,txtClient.ParentEndSubPrivateSubcmdReplace_Click()DimCaseSenseAsIntegerDimSourceTextAsStringDimSourceTextCopyAsStringDimCntAsInteger'CheckforthecasesensitivityoptionsIf(chkCaseSense.Value=vbChecked)ThenCaseSe

7、nse=0ElseCaseSense=1EndIf'Onecontainstheoriginaltextandanothercontainsreplaced'(updated)one.'Usedtocheckwhetherareplacementwasdoneornot.SourceText=txtClient.TextSourceTextCopy=SourceTextIfLen(SourceText)=0ThenExitSubEndIfOnErrorGoToErrHandlerDimSearchTermLenAsIntegerDimFndPosAsIntegerSea

8、rchTermLen=Len(txtSearchTerm.Text)'Searchfromthebeginingofthedocument.Cnt=1'Thisisendlessloop(terminatedonaconditioncheckedinside'theloopbody).While(1)FndPos=InStr(Cnt,SourceText,txtSearchTerm.Text,CaseSense)'Whenamatchisfound,replaceitappropriately.If(FndPos0)ThenSourceText=ReplaceF

9、un(SourceText,FndPos,Len(txtSearchTerm.Text),txtReplaceWithString.Text)Cnt=FndPos+SearchTermLenElseCnt=Cnt+1EndIf'WhetherareplacementwasdoneatallornotIf(Cnt=Len(SourceText)ThentxtClient.Text=SourceTextIf(SourceTextCopySourceText)ThenMsgBoxFinishedreplacingalloccurrences.,vbInformation+vbOKOnly,R

10、eplacedAllElseMsgBoxNomatchingstringsfound.Notextreplaced.,vbInformation+vbOKOnly,NoReplacementEndIfUnloadMeExitSubEndIf'ElseRestartfromhenceforthWendExitSubErrHandler:Response=MsgBox(Anerrorocurredwhilesearching.Informthedeveloperwithdetails.,_vbExclamation+vbOKOnly,ErrorSearching)EndSubPrivate

11、SubForm_Load()'DefaultSearchTermmustbetheoneselectedbytheuserinMainFormIfLen(txtClient.SelText)0ThentxtSearchTerm.Text=txtClient.SelTextEndIfEndSubFunctionReplaceFun(SourceAsString,FromPosAsInteger,_LengthAsInteger,StringTBReplaced_AsString)AsString'Replacesasourcestringwithnewoneappropriate

12、lyDimResultStrAsStringResultStr=Left(Source,FromPos-1)ResultStr=ResultStrStringTBReplacedResultStr=ResultStrRight(Source,Len(Source)-FromPos-Length+1)ReplaceFun=ResultStrEndFunctionPrivateSubtxtReplaceWithString_Change()CallEnableDisableReplaceButtonEndSubPrivateSubtxtReplaceWithString_GotFocus()

13、9;SelectthecontentsofthetextboxIfLen(txtReplaceWithString.Text)0ThentxtReplaceWithString.SelStart=0txtReplaceWithString.SelLength=Len(txtReplaceWithString.Text)EndIfEndSubPrivateSubtxtSearchTerm_Change()CallEnableDisableReplaceButtonEndSubPrivateSubEnableDisableReplaceButton。IfLen(txtSearchTerm.Text

14、)0_AndLen(txtReplaceWithString.Text)0ThencmdReplace.Enabled=TrueElsecmdReplace.Enabled=FalseEndIfEndSubPrivateSubtxtSearchTerm_GotFocus()SelectthecontentsoftextboxIfLen(txtSearchTerm.Text)0ThentxtSearchTerm.SelStart=0txtSearchTerm.SelLength=Len(txtSearchTerm.Text)EndIfEndSub四、代码说明公用接口SearchnReplace的

15、查找替换算法带有普遍性,使用这种方法,查找替换功能可以在任何应用程序中实现,而不用更改frmFindReplace的代码。只是在调用公用接口的地方需要做一些小的改动。查找和替换代码在cmdReplace_Click()过程与ReplaceFun()函数下,让我们从cmdReplace_Click()过程开始。首先,变量CaseSense用于跟踪用户的选择,是否是大小写敏感,如果用户选择大小写敏感的话,它的值设置为0,否则,设置为1。变量SourceText和SourceTextCopy用于保存frmMainForm窗体中txtClientArea的内容(或者是用户在主窗体中为TextBox提供

16、的内容,对于本程序来说,它就是txtClientArea),两个变量保存同样的内容将在下面进行解释(一个是临时变量)。变量Cnt用来跟踪文档的结束,当重新从文档开始处进行查找替换时它将非常有用。这个变量含蓄地说明了当前光标的位置,下次的查找替换将从这个位置开始。主要的算法在while循环内,只要替换或是源TextBox被扫描时,这个循环都将被激活。第二步,我使用了InStr()库函数,它将从第一个参数规定的位置处开始搜索,如果在第二个参数字符串中发现与第三个字符串相匹配的子串,将返回该子串的位置。最后一个参数是大小写敏感选项。InStr()函数的返回值传递给FndPos,如果在源文档中发现了所要查找的字符串,这个值将大于0,否则将返回一个0值。在紧接着的IF语句中,首先替换SourceText变量,然后是通过FndPos+SearchTermLen语句修改Cnt变量,这是必须的,因为下一次的查找和替换要从新的位置开始。另一方面,在Else部分,Cnt变量加一,说名查找和替换要从下一个字符开始。紧接着

温馨提示

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

评论

0/150

提交评论