2010-01-02 4 views
2

richtextbox를 사용하고 있으므로 굵은 글씨와 간단한 내용을 표시하고 싶습니다. 확장자가 .rtf 인 파일을 하나 만들었습니다. 이제 richtextbox에서 richtextbox의 파일을로드합니다. Loadfile() 함수. 이것은 작동합니다. 하지만 richtextbox에 파일의 특정 내용을 표시하려고합니다. 예를 들어, 처음 5 행이 될 수도 있고, 행 번호가 아닐 수도 있습니다. 6에서 10까지입니다. 그렇다면 해결책이 있습니까?richtextbox의 특정 내용

답변

1

아주 깨끗하지는 않을 수도 있습니다. 이 코드는 다른 RTB를 사용하여 파일과 클립 보드를로드하여 서식이 지정된 RTF를 가져옵니다. 그것이 클립 보드 내용을 파괴한다는 것을주의하십시오.

using (var helper = new RichTextBox()) { 
    helper.LoadFile(@"c:\temp\test.rtf"); 
    // Copy line #6 
    int startRange = helper.GetFirstCharIndexFromLine(5); 
    int endRange = helper.GetFirstCharIndexFromLine(6); 
    helper.SelectionStart = startRange; 
    helper.SelectionLength = endRange - startRange; 
    helper.Copy(); 
    } 
    richTextBox1.SelectAll(); 
    richTextBox1.Paste(); 
0

라인 속성을 사용해 보셨습니까? RichTextbox 내용으로 set/get 문자열 배열을 사용할 수 있습니다.

+0

how ?????????????????? – Harikrishna

+0

ProfK 답장을 시도하십시오. 그는 Lines 속성을 사용하고 있습니다. – Anuraj

+0

Ja,하지만 내가 편집에서 말했듯이, 형식을 올바르게 보존하지는 않습니다. – ProfK

1

이것은 서식을 유지하지 않지만 Lines 배열을 조작하는 방법을 보여줍니다.

 var fromStart = new string[richTextBox1.Lines.Length - start]; 
     Array.Copy(richTextBox1.Lines, start, fromStart, 0, fromStart.Length); 
     var lineSet = fromStart.Take(count).ToArray(); 
     richTextBox1.Lines = lineSet; 

시작과 카운트가 라인의 세트를 선택이 함수에 전달되는 다음를 RichTextBox가 이기적으로 자신에게 모든 RTF 코드를 유지에만 라인을 통해 텍스트를 노출 것 같습니다.

+0

좋은 시도이지만, 그것이 받아 들여지는 대답이 아닐 것이라고 생각합니다. 그의 요구 사항은 서식을 유지하는 것 (나는 다른 질문에 대한 그의 의견에서 이것을 발견했다)이다. –

1

ReadAllLines 사용하여 해결 방법 :

string[] lines = File.ReadAllLines(filename); 
int startLine = lines.IndexOf(startMarker); 
int endLine = lines.IndexOf(endMarker); 
if (startLine == -1 || endLine == -1) 
{ 
    // throw some sort of exception - the markers aren't present 
} 
string[] section = new string[endLine - startLine - 1]; 
Array.Copy(lines, startLine + 1, section, 0, section.Length); 
richTextBox.Rtf = string.Join("\r\n", section); 

ReadAllText 사용하여 해결 방법 :

string text = File.ReadAllText(filename); 
int startIndex = text.IndexOf(startMarker); 
int endIndex = text.IndexOf(endMarker, startIndex + startMarker.Length); 
if (startIndex == -1 || endIndex == -1) 
{ 
    // throw some sort of exception - the markers aren't present 
} 
richTextBox.Rtf = text.Substring(startIndex + startMarker.Length, 
           endIndex - startIndex - startMarker.Length);  

이 모두가 당신이 정말로 비록 파일의 해당 섹션의 완전한 RTF 문서를 가지고 있다고 가정 - 당신이 잘 할 수있다 추가 헤더 텍스트가 필요하다는 것을 알게됩니다. 또한 파일이 UTF-8이라고 가정합니다. 그게 맞는지 RTF 형식에 대해 충분히 알지 못합니다.

+0

@sir Jon Skeet 오류가 발생합니다 - 파일 형식이 유효하지 않습니다 - 마지막 줄에 있습니다. – Harikrishna

+0

이 코드는 파일에 RTF가 아닌 일반 텍스트가 포함 된 경우에만 작동합니다. 어떤 경우에는 Rtf 속성이 아닌 Text 속성을 지정해야합니다. –

+0

@nobugz : 마커로 구분 된 RTF가 포함되어있는 경우 왜 실패합니까? @ 하리 크리슈나 : 이것은 마지막 단락에서 설명한 바와 같이 마커 사이에 완전한 유효한 RTF 문서가 아니라는 것을 의미합니다. –

관련 문제