본문

RichTextBox컨트롤의 한글 깨짐 문제 해결하기



데브피아에서 류대열 (baddemon)님이 작성하신 "RichTextBox 컨트롤의 한글관련 오류를 수정해 보아요..." 게시물에 관한 포스팅이다. 핵심이 되는 부분은 아래 첨부파일에서, RichTextBox를 상속받는 RichTextBoxIme.cs로서, 특히 Text의 setter와 getter를 오버라이드 한 부분이다. (코드를 놓고 설명하기에는 분량이 많다) 


'감사합니다' '라는 글을 입력할 때, RichTextBox에서 TextChanged이벤트 핸들러로 텍스트의 변화를 인지하고, 이 내부에서 Text 속성을 사용하는 코드가 존재하는 경우, 위의 동영상에서의 감ㅅㅏㅎㅏㅂ니다와 같이, 한글의 초,중,종성의 조합이 원활하지 않는다는것이 문제이다. 이것은 RichTextBox가  16비트 시절부터 존재하였지만 그때부터 개선없이 코드가 이어져 오는 바람에 현재의 발전된 환경에서 원활하게 동작하지 않기 때문이라 한다(아래 링크에서 참고) 


이런 문제점과, 이런 문제점을 해결해놓은 코드가 사라질 지도 모르기 때문에, 그리고 개인적인 기억을 위하여, 아래 첨부파일과 함께 포스팅 한다. 다시 언급하지만 아래 첨부파일은, 위의 동영상에서와 같이 실행되는 프로젝트(csproj)로서, 류대열님이 작성하신 코드이다. (이런 작업을 해주심에 매우 감사하게 생각한다) 참고로 이 코드에서 Text 속성을 반복해서 사용할 경우 오류가 발생할 수 있다고 하니 코드를 직접 고치거나(역시 귀찮아서 생략), 다른 변수에 저장하여 활용하는 방법을 사용해야 한다.


RichTextBoxIme.zip



기타 링크

리치 텍스트 박스에서 한글 깨짐 현상에 질문드립니다. : textbox를 쓰자, RichTextBox는 멀티스레딩에 고질적인 문제가 있다

RichTextBox의 TextChanged 이벤트 한글깨짐 : 즉 TextLength는 사용에 문제가 없다

RichTextBox 의 한글 문제점 : 해결책은 없지만 자세하게 설명해 놓은 글. KeyPress, KeyDown, KeyUp 에도 문제가 있다는것.

저작자 표시 비영리 변경 금지
신고

댓글 2

  • 게스트 썸네일
    2014.10.09 16:51 신고

    덕분에 richtextboxIME를 애용하고있습니다!

    코드 작성중 기존 richtextBox에서는 없는 IME의 다른 문제점이 발견되었습니다..
    Text의 실제사이즈를 알려고 할때 앤터키(\n)를 친 후에도 width값만 늘어나는 문제가 있네요...


    --------------------
    void reSizeTextBox(ref RichTextBoxIme temp)
    {
    Graphics textGraphics = Graphics.FromHwnd(temp.Handle);
    SizeF stringSize = textGraphics.MeasureString(temp.Text, temp.Font);
    temp.Size = new Size((int)stringSize.Width + 30, (int)stringSize.Height + 10);
    }
    ---------------------
    위 함수는 textChanged이벤트에서 호출하는 코드이구요

    코드설명을 하자면 Text의 글자크기를 계산하여 텍스트박스를 리사이즈 하는 코드입니다..
    어느시점에서 문제가 생긴건지 알수있을지 살짝 여쭈어봅니다 ..

    • 게스트 썸네일
      2015.01.01 10:14 신고

      지금쯤이면 해결하시고 배포까지 완료하셨겠지요, 코드적인 문제는 아닌것같구요 대신 textChanged일때 \n에 대한 분기를 지정주면 되지 않을까 생각해봅니다.

Holic Spirit :: Tistory Edition

design by tokiidesu. powerd by kakao.

티스토리 툴바