2011-12-23 2 views
0

전문 프로그래밍 언어의 코드 편집기 인 내 응용 프로그램 (C++/cli - .net2.0)에 줄 번호를 추가해야합니다.기능과 같은 '회선 번호'를위한 좋은 요리법

내 솔루션 성능에 문제가 있습니다. 나는 다음과 같이했다, 내 _rtbCode 제어의 모든 TextChanged 이벤트에 대해이 기능이 발사된다

_tbLineNumbers 라인 번호를 넣어 텍스트 상자가
void DocumentElement::SetupLineNumbersCount() { 
    StringBuilder ^builder = gcnew StringBuilder(); 
    if(_tbLineNumbers->Lines->Length > _rtbCode->Lines->Length) { 
     for(int i = 0; i <= _rtbCode->Lines->Length;) { 
      if(i != 0) builder->Append("\r\n"); 
      builder->Append(++ i); 
      builder->Append("."); 
     } 
     _tbLineNumbers->Text = builder->ToString(); 
    } 
    else if(_tbLineNumbers->Lines->Length < _rtbCode->Lines->Length) { 
     builder->Append(_tbLineNumbers->Text); 
     for(int i = _tbLineNumbers->Lines->Length; i < _rtbCode->Lines->Length;) { 
      builder->Append("\r\n"); 
      builder->Append(++ i); 
      builder->Append("."); 
     } 
     _tbLineNumbers->Text = builder->ToString(); 
    } 
} 

. 이것은 너무 느립니다 (다른 코드 편집기와 비교해 보았습니다). 나는 몇 줄 (약 10000)을 붙이려고 노력했다. 그리고 나는 반응의 거대한 지연을 가지고있다. 이 기능이 애플리케이션에서 병목 현상이 될 수 있다고 생각합니다.이를 개선하는 방법은 없습니다. 도움을 받으십시오. - 일부 조언. 들으 해피 크리스마스 :

(내가 거기 : How to print line numbers for textbox in c#)

+0

코드 파일에 줄 번호가 나타나야합니까? 또한 프로그래밍 언어에 코드 블록 구분 기호가 있습니까? – ChrisBD

+0

아니요, 줄 번호 매기기는 장식용으로 만 사용되며 코드 파일에는 포함되어 있지 않습니다. –

답변

2

가/스크롤에 줄 번호 텍스트 상자를 업데이트 코드 텍스트 상자의 이벤트의 크기를 조정하는 것이 더 있을까?

이 방법을 사용하면 표시되는 줄 집합 만 신경 써야하며 코드 창에 입력하면 줄 번호를 새로 고칠 필요가 없습니다.

GetFirstVisibleLineIndex

GetLastVisibleLineIndex

것은이 너무 당신을 도울 수 있습니다!

0

짐작할 수 있듯이 문제는 텍스트가 추가되거나 제거 될 때마다 발생하는 모든 텍스트 변경 이벤트에서 해당 코드를 실행하고 있다는 것입니다. 텍스트 색상이 변경된 경우에도 발생합니다!

나는 당신이 좀 더 산문적인 견해를 취할 것을 제안합니다.

System.Environment.Newline자를 실제로 확인해야하며, 텍스트가 프로그래밍 방식으로 추가 된 경우에도 확인해야합니다. 복사, 붙여 넣기, 파일 열기 등. 그렇지 않으면 Keypress 이벤트를 확인하여 반환 또는 입력 키가 눌려 졌는지 (텍스트에 개행 문자를 삽입 할 때)를 확인할 수 있습니다.

코드 파일 자체에 줄 번호가 필요하지 않고 편집보기에만 필요한 경우 편집 창 옆에 새 읽기 전용 텍스트 창을 만드는 것이 좋습니다. "개행 이벤트"를 사용하여 스크롤 위치에 함께 묶고 줄 바꿈이 추가되면 자동으로 줄 번호를 채 웁니다. 그런 다음 줄 번호를 제거하지 않고도 쉽게 편집 된 코드를 저장할 수 있습니다.

또는 줄 번호 지정이 위치 7에서 시작하는 코드를 사용하여 모든 줄의 첫 번째 4 자 (예)를 차지하도록하십시오. 줄 번호를 자동으로 추가하는 줄 바꿈 이벤트가 발생하면 줄 번호 만 계산하십시오 다음 3 칸.

+0

각 TextChanged 이벤트에 'writing numbers'를 처리하는 데 아무런 문제가 없습니다. 줄 번호가 변경되었는지 여부를 알기 위해 필요합니다. 이벤트가 한 번만 호출되는 많은 양의 텍스트를 넣을 때 이것은 실제로 문제가되지 않습니다. 필자는 '어떤 줄이 표시되는지'에주의를 기울이 고 그것에 따라 추가 TextBox에 행 번호 목록을 작성한다고 생각합니다 (표시된 줄만 해당).나는 코드가 같은 RichTextBox에 줄 번호를 쓰는 것이 좋은 결정이 아니라고 생각합니다. 많은 합병증이 있습니다. –

관련 문제