精品久久看,欧美成人久久一级c片免费,日本加勒比在线精品视频,国产一区二区三区免费大片天美,国产成人精品999在线,97理论三级九七午夜在线观看

東坡下載:內(nèi)容最豐富最安全的下載站!

首頁編程開發(fā)VB/asp → VB應(yīng)用程序中實現(xiàn)“查找和替換”功能

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

相關(guān)文章發(fā)表評論 來源:本站時間:2010/10/14 14:08:10字體大小:A-A+

更多

作者:東坡下載點擊:429次評論:0次標(biāo)簽:

一、前言
  盡管Visual Basic并不是我最喜歡的開發(fā)工具,但我喜歡它簡單而又豐富的庫集。每當(dāng)開發(fā)一個需要處理大量文本數(shù)據(jù)的應(yīng)用程序時,需要具有拼寫錯誤糾正功能,例如,微軟的Word程序,當(dāng)運(yùn)行"拼寫檢查"時,將提供給你一個改正錯誤的機(jī)會(盡管是建議),它同時也提供了"查找替換"工具,用以進(jìn)行用戶定義的單詞替換。這篇文章我將解釋如何在VB應(yīng)用程序中實現(xiàn)"查找替換"功能。
  二、前提條件
  在解釋代碼的時候,我假定讀者朋友們已經(jīng)有使用Visual Basic的經(jīng)驗,熟悉Visual Studio開發(fā)環(huán)境中各種內(nèi)置的控件及庫函數(shù)(盡管我使用的不多)。我已經(jīng)嘗試著盡可能地簡化程序代碼,用不了多久你就可以明白程序的邏輯。如果想對一些庫函數(shù)(如參數(shù),語法)進(jìn)一步詳細(xì)地理解,可以參閱MSDN。圖一是程序運(yùn)行后的效果圖:

圖一、程序?qū)崿F(xiàn)"查找替換"功能時的效果圖
  三、基礎(chǔ)工作
  首先創(chuàng)建一個標(biāo)準(zhǔn)的EXE類型的VB工程,將默認(rèn)窗體更名為frmMainForm ,在默認(rèn)窗體上增添一個菜單,具體設(shè)置如下(符號"&"用于加速鍵,單詞mnu后的名字用來說明菜單項的名字(在代碼中使用)):
&Edit
...&Find and Replace mnuFindandreplace
E&xit mnuExit
  向默認(rèn)窗體添加一個TextBox控件,命名為txtClientArea。使用鼠標(biāo)調(diào)整控件位置和尺寸,使它覆蓋窗體的整個客戶區(qū),在屬性窗口將這個TextBox控件的 MultiLine屬性設(shè)置為"True"。
  使用Project > Add Form菜單向工程中添加另外一個窗體,將這個窗體命名為"frmFindReplace",并在屬性窗口中將它的BorderStyle屬性設(shè)置為"4 - FixedToolWindow"。現(xiàn)在,添加兩個TextBox控件,并分別命名為"txtSearchTerm"和"txtReplaceWithString"。添加一個復(fù)選框,命名為chkCaseSense。最后,添加一個命令按鈕控件,命名為"cmdReplace"。
  在frmMainForm窗體中添加如下代碼:
Private Sub mnuExit_Click()
 End
End Sub

Private Sub mnuFindandreplace_Click()
 frmFindReplace.FindnReplace txtClientArea
End Sub

  從上面代碼中可以非常明顯地看出, 當(dāng)點擊Exit菜單時,我們想終結(jié)應(yīng)用程序,當(dāng)點擊"Find and Replace"菜單時,想通過共用接口frmFindReplace及FindnReplace()方法來激活frmFindReplace窗體。這個公用的接口使查找算法具有普遍性,使用這個接口時,需要提供一個TextBox作為參數(shù)(在這里面,搜尋將被執(zhí)行)。通過使用你自己的TextBox的名字來代替txtClientArea的名字,可以在多個文本框內(nèi)執(zhí)行"查找替換"功能,而不用更改代碼。"查找和替換"的實現(xiàn)代碼主要是在frmFindReplace窗體內(nèi),這個模塊的代碼如下:

' This variable is used for making the algorithm generic.
Dim txtClient As TextBox

' This method is the public interface to SnR functionality.

Public Sub FindnReplace(ByRef Tb As TextBox)
 Set txtClient = Tb
 Me.Show , txtClient.Parent
End Sub

Private Sub cmdReplace_Click()
 Dim CaseSense As Integer
 Dim SourceText As String
 Dim SourceTextCopy As String
 Dim Cnt As Integer

 ' Check for the case sensitivity options
 If (chkCaseSense.Value = vbChecked) Then
  CaseSense = 0
 Else
  CaseSense = 1
 End If

 ' One contains the original text and another contains replaced
 ' (updated) one.
 ' Used to check whether a replacement was done or not.
 SourceText = txtClient.Text
 SourceTextCopy = SourceText

 If Len(SourceText) = 0 Then
  Exit Sub
 End If

 On Error GoTo ErrHandler
 Dim SearchTermLen As Integer
 Dim FndPos As Integer

 SearchTermLen = Len(txtSearchTerm.Text)
 ' Search from the begining of the document.
 Cnt = 1

 ' This is endless loop (terminated on a condition checked inside
 ' the loop body).
 While (1)

 FndPos = InStr(Cnt, SourceText, txtSearchTerm.Text, CaseSense)
 
 ' When a match is found, replace it appropriately.
 If (FndPos > 0) Then
  SourceText = ReplaceFun(SourceText, FndPos, Len(txtSearchTerm.Text), txtReplaceWithString.Text)
  Cnt = FndPos + SearchTermLen
 Else
  Cnt = Cnt + 1
 End If

 ' Whether a replacement was done at all or not
 If (Cnt >= Len(SourceText)) Then
  txtClient.Text = SourceText
  If (SourceTextCopy <> SourceText) Then
   MsgBox "Finished replacing all occurrences.", vbInformation + vbOKOnly, "Replaced All"
  Else
   MsgBox "No matching strings found. No text replaced.", vbInformation + vbOKOnly, "No Replacement"
  End If
  Unload Me
  Exit Sub
 End If
 ' Else Restart from henceforth
 Wend
 Exit Sub

ErrHandler:
 Response = MsgBox("An error ocurred while searching. Inform the developer with details.", _
vbExclamation + vbOKOnly, "Error Searching")
End Sub

Private Sub Form_Load()
 ' Default SearchTerm must be the one selected by the user in
 ' MainForm
 If Len(txtClient.SelText) <> 0 Then
  txtSearchTerm.Text = txtClient.SelText
 End If
End Sub

Function ReplaceFun(Source As String, FromPos As Integer, _
Length As Integer, StringTBReplaced _
As String) As String
 ' Replaces a source string with new one appropriately
 Dim ResultStr As String

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

 ReplaceFun = ResultStr
End Function

Private Sub txtReplaceWithString_Change()
 Call EnableDisableReplaceButton
End Sub

Private Sub txtReplaceWithString_GotFocus()
 ' Select the contents of the textbox
 If Len(txtReplaceWithString.Text) <> 0 Then
  txtReplaceWithString.SelStart = 0
  txtReplaceWithString.SelLength = Len(txtReplaceWithString.Text)
 End If
End Sub

Private Sub txtSearchTerm_Change()
 Call EnableDisableReplaceButton
End Sub

Private Sub EnableDisableReplaceButton()
 If Len(txtSearchTerm.Text) <> 0 _
  And Len(txtReplaceWithString.Text) <> 0 Then
  cmdReplace.Enabled = True
 Else
  cmdReplace.Enabled = False
 End If
End Sub

Private Sub txtSearchTerm_GotFocus()
 ' Select the contents of textbox
 If Len(txtSearchTerm.Text) <> 0 Then
  txtSearchTerm.SelStart = 0
  txtSearchTerm.SelLength = Len(txtSearchTerm.Text)
 End If
End Sub
  四、代碼說明
  公用接口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)自己的"查找替換"功能。

相關(guān)評論

閱讀本文后您有什么感想? 已有 人給出評價!

  • 2791 喜歡喜歡
  • 2101 頂
  • 800 難過難過
  • 1219 囧
  • 4049 圍觀圍觀
  • 5602 無聊無聊
熱門評論
最新評論
發(fā)表評論 查看所有評論(0)
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)
主站蜘蛛池模板: 国产999视频 | www.婷婷.com| 九九涩 | 看国产毛片| 四虎影音在线观看 | 精品视频久久 | 都市激情网 | 日韩欧美视频一区 | 亚洲精品乱码久久久久久蜜桃欧美 | 国产欧美自拍视频 | 九七伦理97伦理 | 四虎影院在线播放视频 | 无码精品一区二区三区免费视频 | 日韩欧美视频一区二区三区 | 99久久免费精品国产免费高清 | 精品国产一级毛片大全 | 免费一级视频在线播放 | 激情综合丁香 | 4444免费观看| 激情男人天堂 | 国产日韩欧美一区二区三区在线 | 久久99久久精品97久久综合 | 上床视频网站 | 欧美精品亚洲精品日韩经典 | 精品免费视频 | 亚洲永久精品一区二区三区 | 欧美美女福利视频 | 亚洲一区二区精品视频 | 毛片免费观看网站 | 精品在线观看国产 | 久久6免费视频 | 成人欧美一区二区三区视频xxx | 久久久久久久国产视频 | 欧美男女交性过程视频 | 久久久99精品 | 亚洲国产精品人人做人人爽 | 欧美久久久久久 | 日本高清精品 | 你懂的在线免费视频 | 毛片网此 | 国内精品久久久久影院亚洲 |