ASH84

Software Engineer/Developer, co-founder of Payhere. Ex-Banksalad. Intereseted in iteroperability, bootstrap company, writting.

[C#] ScrollToCaret 를 이용한 TextBox 자동 스크롤링

created:2010-02-20
updated:2015-07-03
edit
TextBox는 본래, 사용자의 데이터 입력을 받아 들이는 기능을 주로 하지만, 때때로 데이터를 보기위해서 쓰이기도 합니다. 특히, 저는 시리얼 포트를 통해서 들어오는 데이터를 한눈에 보기 위해서 자주 사용하는데요, 이런 실시간 데이터를 받아와서 TextBox로 보여줄때 처리해줘야 하는 부분에 대해서 알려드리도록 하겠습니다. 
![](http://ash84.net/wp-content/uploads/1/cfile25.uf.156091204B7F349957304E.jpg)
TextBox에 텍스트를 표시하기 위해서는 Text 속성을 이용해서 입력할 수가 있습니다. 
textBox1.Text = “Hello World”;
그런데 여러줄을 표시하고 싶을때는, MultiLine 속성을 True로 놓고 
textBox1.Text +=”Hello world” + System.Environment.NewLine
이런식으로 써 주면 됩니다. 여기서 질문!! 그렇다면, TextBox의 Height 범위를 넘어버린 텍스트는 어떻게 표시가될까요? 안타깝게도, 넘어가버린 텍스트는 현재의 마우스 드래깅을 하기 전에는 절대 보이지 않습니다. (혹은 스크롤바를 마우스를 이용해서 내리거나)
그렇다면, TextBox의 세로 영역을 넘어버려도 텍스트를 어떻게 내려가면서 보여줄수 있을까요?
**ScrollToCaret( )**
**ScrollToCaret()** 를 이용하면, 자동으로 스크롤링하게 만들수가 있습니다. **ScrollToCaret() 함수는 현재 컨트롤의 내용을 현재 캐럿 위치까지 스크롤하는 함수 입니다.** 즉, 범위가 넘어버려도 내용이 TextBox의 아랫부분까지 내용이 현재 있다면, ScrollToCaret() 함수를 사용하면, 그 부분까지 자동으로 내려가게 되는 것 입니다. 
textBox1.ScrollToCaret();
**주의사항**
ScrollToCaret() 함수를 이용할때에는 주의할 점이 하나 있는데요.
textBox1.Text +=”Hello world” + System.Environment.NewLine textBox1.ScrollToCaret();
위와 같이 쓰면 동작하지 않는 다는 것입니다. 대신에
textBox1.AppendText(“Hello world” + System.Environment.NewLine); textBox1.ScrollToCaret();
**AppendText()** 함수를 이용해서 텍스트를 하나씩 추가해주면서 ScrollToCaret()함수를 쓰면, 바로바로 내용이 있는 곳 까지 자동으로 내려가게 됩니다. ![](http://ash84.net/wp-content/uploads/1/cfile21.uf.125F6E204B7F31AE3E298A.gif)MSDN 주의사항
컨트롤에 포커스가 없거나 캐럿이 컨트롤의 표시 가능 영역에 있는 경우 이 메서드는 효과가 없습니다.

#An Seong Hyun  #c#  #dev  #ScrollToCaret  #TextBox  #안성현  #자동스크롤링