2010-06-25 4 views
3

VB.NET을 배우기 시작했고 구문 강조를하려고합니다. 선택한 텍스트의 색을 설정할 때 문제가 발생합니다. 그것은 전체 richtextbox의 내용을 변경합니다.VB.NET : 구문 하이라이트

Private Sub txtText_TextChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtbText.TextChanged 
    Dim keywords As ArrayList 
    Dim index As Integer 
    Dim keyboardCursorPosition As Integer 

    keywords = New ArrayList() 

    keywords.Add(New Keyword("<?php", Color.Red)) 
    keywords.Add(New Keyword("echo", Color.Blue)) 
    keywords.Add(New Keyword("?>", Color.Red)) 

    keyboardCursorPosition = rtbText.SelectionStart 

    For Each keyword As Keyword In keywords 
     index = rtbText.Text.IndexOf(keyword.getKey()) 

     If index <> -1 Then 
      rtbText.Select(index, keyword.getKey().Length) 
      rtbText.SelectionColor = keyword.getColor() 

      rtbText.DeselectAll() 
      rtbText.SelectionStart = keyboardCursorPosition 
     End If 

    Next 
End Sub 

답변

2

매우 가깝습니다. Btw은

Dim prevColor As Color = rtbText.SelectionColor 
    For Each keyword As KeyWord In keywords 
     '' etc... 
    Next 
    rtbText.SelectionColor = prevColor 

: 다음의 SelectionColor를 복원하는 것을 잊지 마세요 깨끗한 코드를 유지한다. rtb에 대한 메시지 처리기의 이름을 txtXxxx로 지정하면 안됩니다. 이 작은 세부 사항은 조만간 당신을 망칠 것입니다 (그것은 나를 위해, 잘못된 이유를 찾았습니다). 또한 메소드에서 키워드 초기화를 이동하십시오. 그것은 아주 나쁜 방법입니다

For Each key As KeyWord In keywords 
+0

아, 그럴 줄 알았는데 대답을 게시하기 전에 시도하기로 결정했는데 왜 작동하지 않는지 이해할 수 없었습니다. (어떤 이유에서든 'rtbText.SelectionColor = prevColor'를 'DeselectAll' ...), 나를 덜 혼란스럽게 느끼게 해줘서 고마워. :) –

0

글쎄, 변수의 이름을 변경 시도를 참조하십시오. 무료이며, 여러분 만의 코드 편집기 나 IDE를 만들기위한 600 개의 도구가 제공됩니다.

0

을 도움이된다면 당신은 그 불꽃의 API를 보면 또는 추가에 대한 강조 구문하려는 경우