国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

VB應(yīng)用程序中實現(xiàn)“查找和替換”功能

2019-11-18 17:54:56
字體:
供稿:網(wǎng)友
下載本文源代碼

一、前言

  盡管VisualBasic并不是我最喜歡的開發(fā)工具,但我喜歡它簡單而又豐富的庫集。每當(dāng)開發(fā)一個需要處理大量文本數(shù)據(jù)的應(yīng)用程序時,需要具有拼寫錯誤糾正功能,例如,微軟的Word程序,當(dāng)運行"拼寫檢查"時,將提供給你一個改正錯誤的機會(盡管是建議),它同時也提供了"查找替換"工具,用以進(jìn)行用戶定義的單詞替換。這篇文章我將解釋如何在VB應(yīng)用程序中實現(xiàn)"查找替換"功能。

二、前提條件

  在解釋代碼的時候,我假定讀者朋友們已經(jīng)有使用VisualBasic的經(jīng)驗,熟悉VisualStudio開發(fā)環(huán)境中各種內(nèi)置的控件及庫函數(shù)(盡管我使用的不多)。我已經(jīng)嘗試著盡可能地簡化程序代碼,用不了多久你就可以明白程序的邏輯。如果想對一些庫函數(shù)(如參數(shù),語法)進(jìn)一步詳細(xì)地理解,可以參閱MSDN。圖一是程序運行后的效果圖:

->
圖一、程序?qū)崿F(xiàn)"查找替換"功能時的效果圖->

三、基礎(chǔ)工作

  首先創(chuàng)建一個標(biāo)準(zhǔn)的EXE類型的VB工程,將默認(rèn)窗體更名為frmMainForm,在默認(rèn)窗體上增添一個菜單,具體設(shè)置如下(符號"&"用于加速鍵,單詞mnu后的名字用來說明菜單項的名字(在代碼中使用)):

->&Edit
...&FindandReplacemnuFindandreplace
E&xitmnuExit->

  向默認(rèn)窗體添加一個TextBox控件,命名為txtClientArea。使用鼠標(biāo)調(diào)整控件位置和尺寸,使它覆蓋窗體的整個客戶區(qū),在屬性窗口將這個TextBox控件的MultiLine屬性設(shè)置為"True"。

  使用 If(FndPos>0)Then
  SourceText=ReplaceFun(SourceText,FndPos,Len(txtSearchTerm.Text),txtReplaceWithString.Text)
  Cnt=FndPos SearchTermLen
 Else
  Cnt=Cnt 1
 EndIf

 'Whetherareplacementwasdoneatallornot
 If(Cnt>=Len(SourceText))Then
  txtClient.Text=SourceText
  If(SourceTextCopy<>SourceText)Then
   MsgBox"Finishedreplacingalloccurrences.",vbInformation vbOKOnly,"ReplacedAll"
  Else
   MsgBox"Nomatchingstringsfound.Notextreplaced.",vbInformation vbOKOnly,"NoReplacement"
  EndIf
  UnloadMe
  ExitSub
 EndIf
 'ElseRestartfromhenceforth
 Wend
 ExitSub

ErrHandler:
 Response=MsgBox("Anerrorocurredwhilesearching.Informthedeveloperwithdetails.",_
vbExclamation vbOKOnly,"ErrorSearching")
EndSub

PrivateSubForm_Load()
 'DefaultSearchTermmustbetheoneselectedbytheuserin
 'MainForm
 IfLen(txtClient.SelText)<>0Then
  txtSearchTerm.Text=txtClient.SelText
 EndIf
EndSub

FunctionReplaceFun(SourceAsString,FromPosAsInteger,_
LengthAsInteger,StringTBReplaced_
AsString)AsString
 'Replacesasourcestringwithnewoneappropriately
 DimResultStrAsString

 ResultStr=Left(Source,FromPos-1)
 ResultStr=ResultStr&StringTBReplaced
 ResultStr=ResultStr&Right(Source,Len(Source)-FromPos-Length 1)

 ReplaceFun=ResultStr
EndFunction

PrivateSubtxtReplaceWithString_Change()
 CallEnableDisableReplaceButton
EndSub

PrivateSubtxtReplaceWithString_GotFocus()
 'Selectthecontentsofthetextbox
 IfLen(txtReplaceWithString.Text)<>0Then
  txtReplaceWithString.SelStart=0
  txtReplaceWithString.SelLength=Len(txtReplaceWithString.Text)
 EndIf
EndSub

PrivateSubtxtSearchTerm_Change()
 CallEnableDisableReplaceButton
EndSub

PrivateSubEnableDisableReplaceButton()
 IfLen(txtSearchTerm.Text)<>0_
  AndLen(txtReplaceWithString.Text)<>0Then
  cmdReplace.Enabled=True
 Else
  cmdReplace.Enabled=False
 EndIf
EndSub

PrivateSubtxtSearchTerm_GotFocus()
 'Selectthecontentsoftextbox
 IfLen(txtSearchTerm.Text)<>0Then
  txtSearchTerm.SelStart=0
  txtSearchTerm.SelLength=Len(txtSearchTerm.Text)
 EndIf
EndSub->
四、代碼說明

  公用接口SearchnReplace的"查找替換"算法帶有普遍性,使用這種方法,"查找替換"功能可以在任何應(yīng)用程序中實現(xiàn),而不用更改frmFindReplace的代碼。只是在調(diào)用公用接口的地方需要做一些小的改動。

  "查找和替換"代碼在cmdReplace_Click()過程與ReplaceFun()函數(shù)下,讓我們從cmdReplace_Click()過程開始。

  首先,變量CaseSense用于跟蹤用戶的選擇,是否是大小寫敏感,如果用戶選擇大小寫敏感的話,它的值設(shè)置為0,否則,設(shè)置為1。變量SourceText和SourceTextCopy用于保存frmMainForm窗體中txtClientArea的內(nèi)容(或者是用戶在主窗體中為TextBox提供的內(nèi)容,對于本程序來說,它就是txtClientArea),兩個變量保存同樣的內(nèi)容將在下面進(jìn)行解釋(一個是臨時變量)。變量Cnt用來跟蹤文檔的結(jié)束,當(dāng)重新從文檔開始處進(jìn)行"查找替換"時它將非常有用。這個變量含蓄地說明了當(dāng)前光標(biāo)的位置,下次的"查找替換"將從這個位置開始。

  主要的算法在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變量加一,說名查找和替換要從下一個字符開始。緊接著的幾個語句用來通知用戶查找結(jié)果,它們非常容易理解,也非常容易實現(xiàn)。可以直接跳過它們。

  最后,ReplaceFun()函數(shù)進(jìn)行實際的替換工作,它從源字符串的左邊開始,挑選出所有的字符,直到發(fā)現(xiàn)所搜索的字符串位置處為止。緊接著,StringTBReplace被添加到結(jié)果的后面,它將代替所匹配的源字符串。最后,所有的保留的源字符(排除所要更換的子字符串)被添加到這個結(jié)果中去,并作為結(jié)果返回。五、結(jié)論

  有很多方法來實現(xiàn)這一功能,但我認(rèn)為我所使用的方法是最簡單也是最直接的,通過例子程序,你可以在應(yīng)用程序中實現(xiàn)自己的"查找替換"功能。->


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 渑池县| 新沂市| 周宁县| 郎溪县| 苍梧县| 元朗区| 石渠县| 铜鼓县| 阳城县| 桓台县| 应城市| 三原县| 任丘市| 中山市| 周宁县| 韩城市| 隆化县| 伊宁县| 祁东县| 濮阳市| 正蓝旗| 陇川县| 湾仔区| 无锡市| 合作市| 长治县| 长岛县| 舟山市| 泾川县| 开原市| 义马市| 崇文区| 湖州市| 木里| 米脂县| 璧山县| 怀来县| 广宁县| 互助| 巴林右旗| 塔河县|