2013-07-29 2 views
1

Windows Forms에서 행을 최대 18 자로 최대 6 행을 사용하여 RichTextBox을 만들어야합니다. RichTextBox의 문제점은 매우 긴 단어를 쓸 때 두 행으로 표시되지만 한 행처럼 취급됩니다. 예를 들어 :RichTextBox에서 수동 단어 줄 바꾸기

이이 두 줄 텍스트입니다

icexpialidocious
supercalifragilist
입니다.

내 첫 번째 접근 방식은 RichTextBox을 상속하고 OnTextChanged을 재정의하는 자체 클래스를 만드는 것이 었습니다. 멋지게 끝났지 만 전 랩을 잊어 버렸습니다. 따라서 필자의 접근 방식에서는 단어 줄 바꿈을 구현했습니다.

알고리즘은 매우 간단합니다. 텍스트가 변경되면 '공백'및 '새 줄'문자로 나누십시오. 그 다음 행에 몇 개의 문자가 입력되었는지 세어보고 단어가있는 경우이 행에 입력합니다. 단어를위한 공간이 없으면 새로운 라인을 만듭니다.

그리고 성가신 부분 : 이제 해결 방법을 모르는 몇 가지 버그가 있습니다. 사용자가 18 자 길이의 단어를 작성했다고 가정 해 봅시다. 마지막 문자 다음에 커서가 있습니다. 그리고 지금 :

  1. Return 키를 눌러 항상 수동으로 줄 바꿈 문자를 만들 수 있습니다.이 줄 문자는 항상이 위치에 있어야합니다.
  2. 그는 공간을 눌러 새 단어 쓰기를 시작할 수 있습니다.
  3. 그는이 단어에 대해 계속해서 다른 문자를 쓸 수 있습니다.

각 시나리오에서 18 자의 긴 단어와 '새 줄'문자로 끝납니다. 나는 그가 어떻게하고 싶은지를 어떻게 감지 할 지 모른다. 그리고 사용자는 어디에서나 커서를 놓고 이전에 입력 한 텍스트를 편집 할 수 있습니다.

문자열을 상속하는 사용자 지정 문자열 클래스를 만들거나 입력 된 단어 목록을 유지할 수 있지만 구현이 어려워 코드가 읽을 수 없게됩니다.

아이디어를 더 잘 만드는 방법은 무엇입니까?

+0

문자열에서 상속받을 수 없습니다 ... Google에서 비슷한 사례를 찾았습니까? –

+1

내 실수. 나는 내 자신의 클래스에 권투 문자열에 대해 생각했다. 물론 Google에서 검색했습니다. 스택 오버플로에 대한 질문은 항상 문제를 해결할 때 제가하는 마지막 일입니다. –

+0

@MarcinBigoraj에서 FlowDocument의 PageWidth를 설정하는 방법을 살펴 보았습니까? http://msdn.microsoft.com/en-us/library/system.windows.documents.flowdocument.pagewidth.aspx 최대 행의 경우 얼마나 많은 개행 문자가 있는지 추적 할 수 있습니다. – ToastyMallows

답변

0

나는 그것을 알아 냈다. 내 생각으로는 StringReader을 사용하고 문자 단위로 전체 텍스트를 읽었지 만 구현하기가 매우 어렵고 힘들었습니다.

가장 좋은 방법은 RichTextBox의 기본 동작을 변경하지 않는 것입니다. 나는 텍스트를 나누지 않을 것이고, 단어가 줄 지어 있는지 확인하지 않을 것이다. 내 RichTextBox 크기가 고정되어 있고 그걸로 괜찮습니다. 행에 18 자의 문자는 문제가 없지만 줄 바꿈 문자를 세는 것만 큼 간단하지 않기 때문에 문제는 줄 바꿈으로 인한 것입니다.

내가이 동작을 변경하려는 이유는 나중에이 텍스트를 한 줄씩 보내야하기 때문입니다. 하나의 라인에 얼마나 많은 단어가 들어 있는지 수동으로 계산하고 동적으로 라인을 생성하는 것은 쉬운 것처럼 보였지만 버그가있었습니다.

RichTextBox에는 매우 유용한 방법 GetLineFromCharIndex이 있습니다. Text.Count()을 전달하면 내가 가진 실제 줄 수를 결정할 수 있습니다. 이제는 이전보다 2 배 짧은 코드가 있으며 더 큰 버그가없는 것 같습니다.줄마다 텍스트를 보내는 것은 너무 쉽지 않습니다. 왜냐하면 필자가 어떤 줄을 수동으로 계산해야했기 때문입니다. 글자를 읽을 때, 그러나 전반적으로 이전의 솔루션보다 더 수용 할 수있었습니다.

관련 문제