2013-03-14 45 views
0

所以,我試圖創建一個函數或兩個需要HTML標記和顏色他們不同於其他文本(類似於Visual Studio如何爲關鍵詞如Dim)。我發現的唯一方法是使用富文本框,然後執行*.SelectionColor = Color.Blue或類似的操作。有沒有其他方法可以做到這一點?每當文本框更新時,我都會這樣做,它會將所有html標籤更改爲不同的顏色。這對於一個非常簡短的html文件來說工作得很好,但是當它們變得更大時,它會花費很長時間,並且選擇會移動光標。除了* .SelectionColor之外,還可以更改字體顏色或更好地使用它的方法?

那麼,有沒有其他的方式來做到這一點,即使我不得不使用富文本框以外的東西?如果沒有,有沒有人看到一種方法來改善這一點?

這是在文本框更新時運行的兩個函數。標記是藍色的,屬性是紅色的,引號中的內容是綠色的。

'////////////////////////////////////////////////////////////////////////// 
    '// findTag() 
    '// -finds a tag 
    '////////////////////////////////////////////////////////////////////////// 
    Private Function findTag() 
     Dim tag As String = "" 
     Dim i As Integer = 0 
     Dim startTag As Integer 

     While (i < txtCurrentFile.TextLength - 1) 
      If txtCurrentFile.Text(i) = "<" Then 
       startTag = i 
       While txtCurrentFile.Text(i) <> ">" 
        tag += txtCurrentFile.Text(i) 
        i += 1 
       End While 
       tag += ">" 
       colorCode(startTag, tag) 
       tag = "" 
      End If 
      i += 1 
     End While 
     Return Nothing 
    End Function 

    '////////////////////////////////////////////////////////////////////////// 
    '// colorCode() 
    '// -colors different tags accordingly 
    '////////////////////////////////////////////////////////////////////////// 
    Private Function colorCode(ByVal startIndex As Integer, 
           ByVal tag As String) 
     Dim i As Integer = 0 
     Dim isAttributes As Boolean = False 
     Do While (tag(i) <> " " And tag(i) <> ">") 
      txtCurrentFile.Select(startIndex + i, 1) 
      txtCurrentFile.SelectionColor = Color.Blue 
      i += 1 
     Loop 

     If i < tag.Length Then 
      Do Until (tag(i) = ">") 
       Do Until (tag(i) = Chr(34)) 
        txtCurrentFile.Select(startIndex + i, 1) 
        txtCurrentFile.SelectionColor = Color.Red 
        i += 1 
       Loop 
       i += 1 
       Do Until (tag(i) = Chr(34)) 
        txtCurrentFile.Select(startIndex + i, 1) 
        txtCurrentFile.SelectionColor = Color.Purple 
        i += 1 
       Loop 
       i += 1 
      Loop 
      txtCurrentFile.Select(startIndex + i, 1) 
      txtCurrentFile.SelectionColor = Color.Blue 
     End If 
     Return Nothing 
    End Function 

回答

3

幾點建議:

  1. 溝字符掃描儀。如果你真的想要保留字符掃描器,那麼將掃描限制在修改周圍的區域(比如說,後面200個字符以及其後的200個字符在光標前面)

  2. 記住光標在開始顏色過程之前的位置,並在完成後恢復它。

  3. 實現背景着色器,它可以在單獨的線程上完成文件重新着色(如果用戶在着色器運行時未做任何更改,則必須克隆RTB並僅應用更改) 。

+0

+1 - 尼斯建議! – 2013-03-14 18:39:57

+0

查看@JohnBus​​tos的答案。它有更好的工作機會(例如,IE團隊可能比你做得更好,或者我希望能夠實現CSS),並且需要更少的代碼。 – 2013-03-14 18:51:45

+0

我真的很喜歡2號的想法。我有一個類似的想法,只是沒有實現它。 3也是一個好主意。我不完全確定如何在VB中使用線程,但這是有道理的,這樣你就可以繼續,因爲它做到了。第一,我沒有絲毫的想法。 儘管如此,謝謝你的建議! – 2013-03-14 19:03:38

2

...我不知道這是否會在所有的工作!!!,但它可能是冷靜,如果它沒有...

也許打開WebBrowser控件文件和設置你的着色規則在CSS表???

再說一遍,我不知道這是否是一個好主意或沒有,但它可能做的伎倆非常漂亮,因爲它已經HTML你處理...

+0

網絡瀏覽器會像其他頁面一樣解釋html,所以不會顯示實際的html文本,除非您在將它傳遞給Web瀏覽器之前進行編碼。非常好的主意。 – 2013-03-14 18:48:30

+0

轉換爲.txt文件,然後使用網頁瀏覽器處理...可能有效。我很確定IE可以打開.txt文件。謝謝。 – 2013-03-14 19:01:48