2013-05-18 4 views
5

현재 검색 옵션이있는 메모장에서 작업 중입니다. 단어를 입력하면 단어를 찾아 강조 표시합니다. 나는 그것을 작동시키지 만, 나는 현재 그것을 사용하고있는 방법으로 전달할 수없는 벽에 도달했다. 나는 현재 텍스트 상자에있는 모든 단어를 ''로 나누고 입력 된 검색어를 찾을 때까지 단어의 길이를 합산하여 찾은 단어의 정확한 위치를 볼 수 있으므로 강조 할 수 있습니다.텍스트 상자에 단어가있는 줄을 어떻게 찾을 수 있습니까?

내가 문제가되는 것은 split ('')을 사용하여 텍스트 상자의 각 단어를 가져올 때마다 사용자가 새 줄을 추가 할 때마다 분할의 반환 배열이 "wordOnFirstLine \ r \ nwordOnSecondLine ". 그래서 그들은 한 단어로 간주 될 것입니다. 텍스트 상자에서 단어를 찾아 정확히 위치를 확인할 수있는 또 다른 방법은 무엇입니까?

답변

2

시도 분할 현재하고 있습니다.

+0

예! 마침내! 마침내 내가 물어보기로 결정하기 전에 얼마나 오랫동안 이걸로 내 머리를 아프게했는지 모르겠다. 이것으로 해결했습니다. 고마워요! – CsharpFrustration

0

''를 사용하여 모든 단어를 분리하지 마십시오. 문장 ('\ n')을 기준으로 텍스트를 분할 한 다음 각 문장마다 IndexOf를 사용하여 단어의 발생을 찾을 수 있습니다.

2

나는 GetLineFromCharIndex(int) 방법을 찾고 있다고 생각합니다. 단어의 첫 번째 문자 색인을 전달하면 줄 번호가 반환됩니다.

같은 문자열이
string splitstring = stringToSplit.Split(new char[] { ' ', '\n', '\r' }); 

그것은 당신에게 모든 '\ n을'과 '\ r에'문자 사이에 빈 문자열을 줄 것이다,하지만 수정 당신이있어 무엇에 가장 가까운 수 있습니다

0

아무 것도 나누지 마십시오. 잠재적으로 큰 문자열 배열을 만드는 것은 자원 낭비입니다.

는 간단히 (해당하는 경우의 비교 자 포함) 같이 IndexOf 그래서 당신이 전에 공백으로 구분 된 단어로 단어 "대답"을 검색 가정하여 전체 텍스트 상자의 텍스트

을 당신에게 첫 번째 단어의 위치를 ​​줄 수 당신의 메모장 텍스트 후에는

지금
int pos = 0; 
string searchText = " answer "; 
pos = myNotePad.Text.IndexOf(searchText, pos, StringComparison.CurrentCulture.IgnoreCase); 

문자열을

if(pos > 0) 
{ 
    myNotePad.Text.SelectionStart = pos + 1; 
    myNotePad.Text.SelectionLength = searchText.Length - 2; 
} 

을 선택 쓰기 그리고 당신은 변수의 값을 저장하는 경우 당신은 쉽게 다음 찾기 기능을 구현할 수도 있습니다.

관련 문제