c# RichTextBox 줄 간격 설정하기
좀 복잡하다. RichTextBox는 윈도우즈 차원에서 제공되는 컨트롤인데 델파이와 달리 .네트는 win32 api를 제대로 랩wrap하지 않아서 아래와 같이 win32 api를 직접 제어해야 한다. SendMessage의 아규먼트로는 아래와 같이 IntPtr을 넣는 게 원칙이긴 한데 조금 더 복잡하다.
좀 복잡하다. RichTextBox는 윈도우즈 차원에서 제공되는 컨트롤인데 델파이와 달리 .네트는 win32 api를 제대로 랩wrap하지 않아서 아래와 같이 win32 api를 직접 제어해야 한다. SendMessage의 아규먼트로는 아래와 같이 IntPtr을 넣는 게 원칙이긴 한데 조금 더 복잡하다.
RichTextBox.AppendText는 느리다. 수십 줄 출력하는 데에도 그려지는 게 보일 정도다. 아래의 방법들을 쓰면 빠르게 출력된다. RichTextBox.BeginUpdate/EndUpdate 만들기 일반적인 비주얼 컨트롤들의 경우 BeginUpdate/EndUpdate가 있다면 이걸 쓰는 게 빠르다. AppendText로 추가되는 내용을 바로바로 출력하는 게 아니라 출력을 멈췄다가 추가할 것들을 다 추가한 뒤 한꺼번에 출력하는 거다. 하지만 RichTextBox에는 BeginUpdate/EndUpdate가 없다. 아래와 같이 상속해서 써야 한다. String.Join 이용하기…
TextBox는 메모장이고 RichTextBox는 워드패드다. 문자열에 스타일을 적용하려면 RichTextBox를 써야 한다. RichTextBox는 윈도우즈 차원에서 제공되는 것이며 .네트는 win32 api를 랩wrap하여 지원한다. 그러나 완벽하지는 않아서 높은 수준으로 이용하려면 직접 win32 api를 제어해야 한다. 스타일이 적용된 것은 rich text format이라 하며 줄여서 rtf라고 한다. 스타일을 제어하는 데에는 크게 세 가지 방법이 있다. 문자열을 입력하기 전에 스타일을 설정하기 스타일을…
폼 클래스의 위치 폼 클래스 코드는 네임스페이스에서 제일 위에 있어야 한다. 폼 클래스 코드 위에 다른 클래스 코드가 있으면 디자이너가 열리지 않는다. 디자이너는 파일의 첫 번째 클래스를 이용하여 작동하기 때문이다. 그러나 이거는 디자이너의 문제일 뿐이지 빌드의 문제는 아니다. 따라서 디자이너를 쓸 수 없을 뿐 빌드는 제대로 된다. The designer could not be shown for this…
round의 뜻 round는 반올림이라는 뜻이 아니라 ‘특정 자리의 수를 올리거나 내려서 어림수로 만든다’는 의미로 동사다. ‘어림수’라는 명사로는 쓰이지 않는다. 명사인 어림수는 round number/figure라고 한다. 일부 영한사전들에는 반올림이라고 나와 있지만 이는 틀리다. round는 가까운 수로 바꿀 수 있고 먼 수로도 바꿀 수 있다. 컴퓨터 프로그래밍을 하다 보면 round towards zero라는 걸 만나게 되는데 이때에는 ‘내림floor‘이나 ‘버림truncate‘이…
칼럼 폭 자동 조절 셀 단위로 포맷하기 출력 포맷을 설정할 때에는 주로 칼럼 단위로 하지만 간혹 셀 단위로 해야 할 때도 있다. 아래와 같이 한다. 셀 단위로 색 바꾸기 위의 예제에서 Style.Format을 Style.Backcolor로 바꾸면 된다. 동적으로 바꾸고 싶으면 아래와 같이 DataGridView.CellPainting 이벤트를 쓰면 된다. 이 이벤트가 작동할 때 e.ColumnIndex와 e.RowIndex는 모두 -1 즉 헤더부터 시작하므로…
BindingList로 바꾸기 예를 들어 iEnumerable을 리스트로 만들려면 toList를 이용할 수 있는데 toBindingList는 없다. List로 만든 뒤 BindingList로 타입캐스트를 하려 해도 되질 않는다. 이런 경우를 위해 BindingList는 아래와 같은 컨스트럭터를 제공한다. Remove와 RemoveAt의 성능 비교 Remove는 인스턴스로 찾아서 지우고 RemoveAt은 인덱스 번호로 찾아서 지운다. 후자가 많이 더 빠르다. 지울 대상의 인덱스 번호를 안다면 당연히 후자를 써야 한다….
열 감추기 DataTable을 건드릴 게 아니라 DataGridView를 제어해야 한다. 파일 입출력 클래스는 procotol buffers(protobuf)를 이용하여 쉽게 바이너리로 바꿀 수 있지만 데이터 테이블은 힘들다. 데이터 테이블도 바꿀 수 있게 프로토버프를 이용한 라이브러리가 나와 있긴 하지만 프로토버프 제작자가 만든 게 아니라서 써 보진 않았다. WriteXml는 데이터 테이블의 이름을 설정해야 작동한다. xml로 저장하고 읽는 건 저장에 많은 용량을…
아래의 코드는 디버그 모드에서 제대로 작동하지 않지만 크로스-뜨레드 예외로 처리되지도 않는다. 릴리스 모드에서는 정상으로 작동한다. 아래와 같이 하면 디버그 모드에서도 잘 된다. DataTable은 뜨레드에서 안전하지 않은데 다른 비주얼 컨트롤들과는 달리 크로스-뜨레드 예외로 처리되지 않고 상황에 따라 다르게 몇몇의 예외로 처리되거나 위의 예제에서처럼 아예 조용하다. 그럼에도 불구하고 이것은 크로스-뜨레드 문제이며 다른 예외 처리에 정신을 팔리거나 유의하지…