2013-07-08 3 views
0

C#에서 텍스트 편집기를 개발 중이며 줄 수를 계산하려고합니다.리치 텍스트 상자 행 수

private void updateNumberLabel() 
    { 
     Point pos = new Point(0, 0); 
     int firstIndex = Document.GetCharIndexFromPosition(pos); 
     int firstLine = Document.GetLineFromCharIndex(firstIndex); 

     pos.X = ClientRectangle.Width; 
     pos.Y = ClientRectangle.Height; 

     int lastIndex = Document.GetCharIndexFromPosition(pos); 
     int lastLine = Document.GetLineFromCharIndex(lastIndex); 

     int actualLine = Document.GetLineFromCharIndex(actualPos); 
     pos = Document.GetPositionFromCharIndex(lastIndex); 

     if (lastLine != actualLine) 
     { 
      numberLabel.Text = ""; 
      for (int i = firstLine; i <= lastLine + 1; i++) 
      { 
       numberLabel.Text += i + 1 + "\n"; 
      } 
     } 
    } 

그것은 잘 작동하고 당신이 그들을 쓰는 동안 행의 수를 추가,하지만 당신은 하나를 삭제하면 삭제하거나 한 번 더 라인을 추가하는 경우에만 업데이트됩니다.

나는 그것을 즉시 만들고 싶다. 하나를 삭제하면 즉시 감소합니다.

+1

'richTextBox.Lines.Count()'의 문제점은 무엇입니까? – derape

답변

3

아마이 그것에 대해 너무 쉽게,하지만 :

private void richTextBox1_TextChanged(object sender, EventArgs e) 
{ 
    var lineCount = richTextBox.Lines.Count(); 
    numberLabel.Text = lineCount.ToString(); 
} 

당신이 TextChanged 이벤트에 할당해야합니다.

이것이 필요한 것이 아니라면, 달성하려는 정보를 추가하십시오.

+0

나는 시도했다 : numberLabel.Text + Document.Lines.Count(). ToString() + "\ n"; 하지만 텍스트가 변경 될 때마다 레이블에 줄을 추가합니다. – Los799

+0

@ Los799 현재 사용중인 줄을 표시하고 싶습니까? 그럼 그냥 다음과 같이하면됩니다 :'numberLabel.Text = Document.Lines.Count(). ToString();' – derape

0

기본 서식있는 텍스트 상자로 싸우는 대신 텍스트 서식을 완전히 제어 할 수 있도록 자신 만의 컨트롤을 만들어보십시오.

텍스트 편집기를 직접 개발하는 경우 개발자를 위해 설계된 형식으로 게임을 시도하는 대신 텍스트를 저장하고 관리하는 것이 좋습니다. 약간 다른 목적. 늦게 "비트"응답에 대한

죄송합니다

+0

저는 C#의 초보자입니다. 줄을 세는 방법을 모르면 어떻게하면 내 자신을 만들 수 있습니까? 제어? 감사! – Los799

+0

그럴 경우 Romano 's Environment.NewLine 솔루션을 시도하는 것을 거의하지 않고 말하는 것입니다. 노트 라인은 대문자 L로 시작합니다. – Pharap

0

Los799, 나는 지금이 질문을 보았다. 그러나 문제는 여전히 유효하면, 여기에 라인을 계산하는 간단한 방법 그냥 foreach 루프를 사용

int CountOfLines = 1;//1 because min 1 line is always in a text of a control, that has a Text property 
foreach (char c in YourText) 
      { 
       if (c == '\r' | c == '\n')//these are all equal the ENTER key 
       { 
        CountOfLines++; 
       } 
      } 

당신은 또한뿐만 아니라 문자를 계산하는 foreach 문을 사용할 수 있지만 foreach는 당신이, 문자를 선택할 수 있습니다 당신이 등장 인물의 수에 포함되기를 원하지 않는다. 예를 들면 다음과 같습니다.

int CountOfCharacters = 0;//0 because by default there are no characters in a textbox or label. 
foreach (char c in YourText) 
      { 
       if (c != '\t' & c != '\n' & c != '\r')//in this example I want to count only the characters that are not an ENTER or a TAB. 
       { 
        CountOfCharacters++; 
       } 
      } 

희망 사항은 조금 늦었을지라도이 내용을 읽는 사람들에게 도움이되기를 바랍니다. :)

0

정말 늦었지만 줄은 문자열 배열입니다. 그냥 길이 가져와.

richTexBox.Lines.Length.ToString(); 
관련 문제