VB應用程序中實現(xiàn)“查找和替換”功能_第1頁
VB應用程序中實現(xiàn)“查找和替換”功能_第2頁
VB應用程序中實現(xiàn)“查找和替換”功能_第3頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、VB應用程序中實現(xiàn)“查找和替換”功能VB應用程序中實現(xiàn)查找和替換功能下載本文源代碼一、前言盡管VisualBasic并不是我最喜歡的開發(fā)工具,但我喜歡它簡單而又豐富的庫集。每當開發(fā)一個需要處理大量文本數(shù)據(jù)的應用程序時,需要具有拼寫錯誤糾正功能,例如,微軟的Word程序,當運行拼寫檢查時,將提供給你一個改正錯誤的機會(盡管是建議),它同時也提供了查找替換工具,用以進行用戶定義的單詞替換。這篇文章我將解釋如何在VB應用程序中實現(xiàn)查找替換功能。二、前提條件在解釋代碼的時候,我假定讀者朋友們已經(jīng)有使用VisualBasic的經(jīng)驗,熟悉VisualStudio開發(fā)環(huán)境中各種內(nèi)置的控件及庫函數(shù)(盡管我使用

2、的不多)。我已經(jīng)嘗試著盡可能地簡化程序代碼,用不了多久你就可以明白程序的邏輯。如果想對一些庫函數(shù)(如參數(shù),語法)進一步詳細地理解,可以參閱MSDN圖一是程序運行后的效果圖:圖一、程序?qū)崿F(xiàn)查找替換功能時的效果圖三、基礎工作首先創(chuàng)建一個標準的EXE類型的VB工程,將默認窗體更名為frmMainForm,在默認窗體上增添一個菜單,具體設置如下(符號用于加速鍵,單詞mnu后的名字用來說明菜單項的名字(在代碼中使用)Edit技搜索操作系統(tǒng)殺聊天軟件網(wǎng)ASPJJSPVPHPXVBVJavaCMySQLSOracleDFlashDFireworksFPhotoshopCFreeHandIDirectorA視

3、頻處理產(chǎn)品庫推薦筆記本數(shù)碼相機DV攝像機CPU主板打印機.FindandReplacemnuFindandreplaceExitmnuExit向默認窗體添力口一個TextBox控件,命名為txtClientArea。使用鼠標調(diào)整控件位置和尺寸,使它覆蓋窗體的整個客戶區(qū),在屬性窗口將這個TextBox控件的MultiLine屬性設置為True。使用ProjectAddForm菜單向工程中添加另外一個窗體,將這個窗體命名為frmFindReplace,并在屬性窗口中將它的BorderStyle屬性設置為4-FixedToolWindow?,F(xiàn)在,添加兩個TextBox控件,并分別命名為txtSear

4、chTerm和txtReplaceWithString。添加一個復選框,命名為chkCaseSense。最后,添加一個命令按鈕控件,命名為cmdReplac&在frmMainForm窗體中添加如下代碼:PrivateSubmnuExit_Click()EndEndSubPrivateSubmnuFindandreplace_Click()frmFindReplace.FindnReplacetxtClientAreaEndSub從上面代碼中可以非常明顯地看出,當點擊Exit菜單時,我們想終結應用程序,當點擊FindandReplace菜單時,想通過共用接口frmFindReplace及

5、FindnReplace()方法來激活frmFindReplace窗體。這個公用的接口使查找算法具有普遍性,使用這個接口時,需要提供一個TextBox作為參數(shù)(在這里面,搜尋將被執(zhí)行)。通過使用你白己的TextBox的名字來代替txtClientArea的名字,可以在多個文本框內(nèi)執(zhí)行查找替換功能,而不用更改代碼。查找和替換的實現(xiàn)代碼主要是在frmFindReplace窗體內(nèi),這個模塊的代碼如下:'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、查找替換算法帶有普遍性,使用這種方法,查找替換功能可以在任何應用程序中實現(xiàn),而不用更改frmFindReplace的代碼。只是在調(diào)用公用接口的地方需要做一些小的改動。查找和替換代碼在cmdReplace_Click()過程與ReplaceFun()函數(shù)下,讓我們從cmdReplace_Click()過程開始。首先,變量CaseSense用于跟蹤用戶的選擇,是否是大小寫敏感,如果用戶選擇大小寫敏感的話,它的值設置為0,否則,設置為1。變量SourceText和SourceTextCopy用于保存frmMainForm窗體中txtClientArea的內(nèi)容(或者是用戶在主窗體中為TextBox提供

16、的內(nèi)容,對于本程序來說,它就是txtClientArea),兩個變量保存同樣的內(nèi)容將在下面進行解釋(一個是臨時變量)。變量Cnt用來跟蹤文檔的結束,當重新從文檔開始處進行查找替換時它將非常有用。這個變量含蓄地說明了當前光標的位置,下次的查找替換將從這個位置開始。主要的算法在while循環(huán)內(nèi),只要替換或是源TextBox被掃描時,這個循環(huán)都將被激活。第二步,我使用了InStr()庫函數(shù),它將從第一個參數(shù)規(guī)定的位置處開始搜索,如果在第二個參數(shù)字符串中發(fā)現(xiàn)與第三個字符串相匹配的子串,將返回該子串的位置。最后一個參數(shù)是大小寫敏感選項。InStr()函數(shù)的返回值傳遞給FndPos,如果在源文檔中發(fā)現(xiàn)了所要查找的字符串,這個值將大于0,否則將返回一個0值。在緊接著的IF語句中,首先替換SourceText變量,然后是通過FndPos+SearchTermLen語句修改Cnt變量,這是必須的,因為下一次的查找和替換要從新的位置開始。另一方面,在Else部分,Cnt變量加一,說名查找和替換要從下一個字符開始。緊接著

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論