


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、VB應(yīng)用程序中實(shí)現(xiàn)“查找和替換”功能VB應(yīng)用程序中實(shí)現(xiàn)查找和替換功能下載本文源代碼一、前言盡管VisualBasic并不是我最喜歡的開發(fā)工具,但我喜歡它簡單而又豐富的庫集。每當(dāng)開發(fā)一個(gè)需要處理大量文本數(shù)據(jù)的應(yīng)用程序時(shí),需要具有拼寫錯(cuò)誤糾正功能,例如,微軟的Word程序,當(dāng)運(yùn)行拼寫檢查時(shí),將提供給你一個(gè)改正錯(cuò)誤的機(jī)會(盡管是建議),它同時(shí)也提供了查找替換工具,用以進(jìn)行用戶定義的單詞替換。這篇文章我將解釋如何在VB應(yīng)用程序中實(shí)現(xiàn)查找替換功能。二、前提條件在解釋代碼的時(shí)候,我假定讀者朋友們已經(jīng)有使用VisualBasic的經(jīng)驗(yàn),熟悉VisualStudio開發(fā)環(huán)境中各種內(nèi)置的控件及庫函數(shù)(盡管我使用
2、的不多)。我已經(jīng)嘗試著盡可能地簡化程序代碼,用不了多久你就可以明白程序的邏輯。如果想對一些庫函數(shù)(如參數(shù),語法)進(jìn)一步詳細(xì)地理解,可以參閱MSDN圖一是程序運(yùn)行后的效果圖:圖一、程序?qū)崿F(xiàn)查找替換功能時(shí)的效果圖三、基礎(chǔ)工作首先創(chuàng)建一個(gè)標(biāo)準(zhǔn)的EXE類型的VB工程,將默認(rèn)窗體更名為frmMainForm,在默認(rèn)窗體上增添一個(gè)菜單,具體設(shè)置如下(符號用于加速鍵,單詞mnu后的名字用來說明菜單項(xiàng)的名字(在代碼中使用)Edit技搜索操作系統(tǒng)殺聊天軟件網(wǎng)ASPJJSPVPHPXVBVJavaCMySQLSOracleDFlashDFireworksFPhotoshopCFreeHandIDirectorA視
3、頻處理產(chǎn)品庫推薦筆記本數(shù)碼相機(jī)DV攝像機(jī)CPU主板打印機(jī).FindandReplacemnuFindandreplaceExitmnuExit向默認(rèn)窗體添力口一個(gè)TextBox控件,命名為txtClientArea。使用鼠標(biāo)調(diào)整控件位置和尺寸,使它覆蓋窗體的整個(gè)客戶區(qū),在屬性窗口將這個(gè)TextBox控件的MultiLine屬性設(shè)置為True。使用ProjectAddForm菜單向工程中添加另外一個(gè)窗體,將這個(gè)窗體命名為frmFindReplace,并在屬性窗口中將它的BorderStyle屬性設(shè)置為4-FixedToolWindow?,F(xiàn)在,添加兩個(gè)TextBox控件,并分別命名為txtSear
4、chTerm和txtReplaceWithString。添加一個(gè)復(fù)選框,命名為chkCaseSense。最后,添加一個(gè)命令按鈕控件,命名為cmdReplac&在frmMainForm窗體中添加如下代碼:PrivateSubmnuExit_Click()EndEndSubPrivateSubmnuFindandreplace_Click()frmFindReplace.FindnReplacetxtClientAreaEndSub從上面代碼中可以非常明顯地看出,當(dāng)點(diǎn)擊Exit菜單時(shí),我們想終結(jié)應(yīng)用程序,當(dāng)點(diǎn)擊FindandReplace菜單時(shí),想通過共用接口frmFindReplace及
5、FindnReplace()方法來激活frmFindReplace窗體。這個(gè)公用的接口使查找算法具有普遍性,使用這個(gè)接口時(shí),需要提供一個(gè)TextBox作為參數(shù)(在這里面,搜尋將被執(zhí)行)。通過使用你白己的TextBox的名字來代替txtClientArea的名字,可以在多個(gè)文本框內(nèi)執(zhí)行查找替換功能,而不用更改代碼。查找和替換的實(shí)現(xiàn)代碼主要是在frmFindReplace窗體內(nèi),這個(gè)模塊的代碼如下:'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、查找替換算法帶有普遍性,使用這種方法,查找替換功能可以在任何應(yīng)用程序中實(shí)現(xiàn),而不用更改frmFindReplace的代碼。只是在調(diào)用公用接口的地方需要做一些小的改動。查找和替換代碼在cmdReplace_Click()過程與ReplaceFun()函數(shù)下,讓我們從cmdReplace_Click()過程開始。首先,變量CaseSense用于跟蹤用戶的選擇,是否是大小寫敏感,如果用戶選擇大小寫敏感的話,它的值設(shè)置為0,否則,設(shè)置為1。變量SourceText和SourceTextCopy用于保存frmMainForm窗體中txtClientArea的內(nèi)容(或者是用戶在主窗體中為TextBox提供
16、的內(nèi)容,對于本程序來說,它就是txtClientArea),兩個(gè)變量保存同樣的內(nèi)容將在下面進(jìn)行解釋(一個(gè)是臨時(shí)變量)。變量Cnt用來跟蹤文檔的結(jié)束,當(dāng)重新從文檔開始處進(jìn)行查找替換時(shí)它將非常有用。這個(gè)變量含蓄地說明了當(dāng)前光標(biāo)的位置,下次的查找替換將從這個(gè)位置開始。主要的算法在while循環(huán)內(nèi),只要替換或是源TextBox被掃描時(shí),這個(gè)循環(huán)都將被激活。第二步,我使用了InStr()庫函數(shù),它將從第一個(gè)參數(shù)規(guī)定的位置處開始搜索,如果在第二個(gè)參數(shù)字符串中發(fā)現(xiàn)與第三個(gè)字符串相匹配的子串,將返回該子串的位置。最后一個(gè)參數(shù)是大小寫敏感選項(xiàng)。InStr()函數(shù)的返回值傳遞給FndPos,如果在源文檔中發(fā)現(xiàn)了所要查找的字符串,這個(gè)值將大于0,否則將返回一個(gè)0值。在緊接著的IF語句中,首先替換SourceText變量,然后是通過FndPos+SearchTermLen語句修改Cnt變量,這是必須的,因?yàn)橄乱淮蔚牟檎液吞鎿Q要從新的位置開始。另一方面,在Else部分,Cnt變量加一,說名查找和替換要從下一個(gè)字符開始。緊接著
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能家居設(shè)備兼容性與互聯(lián)考核試卷
- 住院患者出院管理工作總結(jié)計(jì)劃
- 企業(yè)生產(chǎn)計(jì)劃管理
- 營業(yè)收入識別標(biāo)準(zhǔn)計(jì)劃
- 為學(xué)生提供全方位的發(fā)展支持計(jì)劃
- 班主任對學(xué)生未來發(fā)展的指導(dǎo)計(jì)劃
- 《材料工程基礎(chǔ)材料化學(xué)》課程教學(xué)大綱
- 幼兒園小班音樂教育安排計(jì)劃
- 企業(yè)文化與團(tuán)隊(duì)建設(shè)策略
- 提升個(gè)人能力的策略分享計(jì)劃
- 某水廠水資源論證報(bào)告書
- 酒店幕墻工程單元板塊幕墻軌道吊裝方案
- 消毒供應(yīng)中心清洗消毒滅菌技術(shù)操作規(guī)范
- BIM在鋼結(jié)構(gòu)工程中應(yīng)用
- 職業(yè)健康安全交底
- GB∕T 7588.1-2020 電梯制造與安裝安全規(guī)范 第1部分:乘客電梯和載貨電梯
- 壓力容器定期(月度)檢查記錄
- 無線電遙控模型飛機(jī)戴氏教學(xué)法(業(yè)余特技飛行訓(xùn)練)
- 2022年全省公訴業(yè)務(wù)知識考試參考答案
- 天潤化肥事故案例警示會3.5
- 鎮(zhèn)政府(街道辦事處)辦公大樓平面圖
評論
0/150
提交評論