c#

  • c# DataGridView 글꼴 제어하기

    DataGridViewCell.Style을 설정하여 글꼴의 색, 포매트, 모양 등을 바꿀 수 있다. 일단 셀을 특정하여 스타일을 적용하면 적용된 셀이 이동해도 스타일은 유지된다. 데이터 쏘스에 바인드를 한 경우에도 마찬가지다. 예를 들어 DataTable 가운데에 행을 삽입해도 밀려 내려가는 행들은 기존의 스타일들을 유지한 채로 이동한다. DataGridViewRowCollection.Insert(0, 1)이라고 하면 0번 행에 행 하나를 삽입한다. 두 번째 정수는 삽입할 행의 수를 뜻하기…

  • c# DataTable에 행 추가하기 – DataRowCollection.Add

    행을 추가하기 위해 DataRowCollection.Add를 실행할 때 레퍼런스에는 반드시 DataRow나 object 배열을 패러미터로 받아야 한다고 나와 있지만 그렇지 않다. 아래와 같이 아규먼트를 입력하지 않거나 배열 아닌 하나의 값을 입력해도 된다. 아규먼트로 정수를 입력할 때 DataGridViewRowCollection.Add와는 다르게 작동하므로 주의하는 게 좋다. DataGridViewRowCollection.Add에 정수를 입력하면 그 수만큼의 빈 행들이 만들어진다.

  • c# System.Timers.Timer로 비주얼 컨트롤 제어하기

    멀티뜨레드로 인한 크로스-뜨레드 예외 발생 메인 뜨레드로부터 분리된 뜨레드에서 비주얼 컨트롤을 제어하려 하면 원칙적으로 크로스-뜨레드 오류가 발생한다. 이러한 오류는 디버그 빌드에서는 예외로 처리되지만 릴리스 빌드에서는 그냥 오류가 생긴 대로 출력하고 넘어간다. 릴리스 모드에서 예외로 처리가 되지 않는다고 괜찮은 게 아니라 오류를 무시하는 것이므로 엉뚱한 결과가 나타날 수 있다. 따라서 디버그 빌드에서 분명하게 조치를 취해야 한다….

  • [c#] 멀티뜨레드 동기와 비동기

    동기는 하나의 뜨레드에서 순차적으로 처리되는 걸 말하고 비동기는 여러 뜨레드들에서 동시에 처리되는 걸 뜻한다. 동기를 synchronous라 하고 비동기는 부정 접두사 ‘a~’를 붙여서 asynchronous라 한다. 각각 줄여서 sync와 async라고도 하며 async는 ‘에이씽크’라고 읽는다. ‘아씽크’라고 읽는 거 아니다. synchronous를 네이버 영어사전에서 찾아보면 제일 먼저 ‘동시 발생하는’이라는 뜻이 나온다. 여기에서 혼란이 시작된다. 프로그래밍에서 이해하는 것은 사전적 의미와 완전 반대다….

  • c# is 연산자로 비주얼 컨트롤 검색하기

    아래 예제는 폼에 있는 비주얼 컨트롤들 가운데 TextBox들만 처리하는 거다. is는 형 변환을 할 수 있는지 확인하는 연산자다. Controls는 Control의 컬렉션이다. 즉 Control을 TextBox로 타입캐스트할 수 있느냐를 묻는 거다. 아래의 코드는 오류로 처리된다. Controls에 담겨 있는 건 인스턴스이고 TextBox는 클래스 자체이기 때문이다. 이렇게는 가능하다.

  • c# String 잔기술들 1

    String과 string의 차이 String은 클래스이고 string은 변수형이다. 그러나 아래 예제를 보면 이들 사이에 차이가 없다는 걸 알 수 있다. string은 변수형인데 new로 만들 수 있고 String은 클래스인데 new 없이 그냥 쓸 수 있다. 이들은 이렇게 변수형과 클래스 모두의 기능을 한다. 더 정확하게는 string이 String의 껍데기다. string is an alias for System.String in .NET.– Built-in reference…

  • c# ComboBox 잔기술들

    dictionary 바인드하기 딕셔너리 자체를 바인드하는 게 아니라 키나, 밸류의 필드를 해야 하는 거에 유의한다. wpf DataColumn 바인드하기 wpf의 콤보박스는 ComboBox.DisplayMember가 아니고 ComboBox.DisplayMemberPath를 이용한다.

  • c# RichTextBox 줄 간격 설정하기

    좀 복잡하다. RichTextBox는 윈도우즈 차원에서 제공되는 컨트롤인데 델파이와 달리 .네트는 win32 api를 제대로 랩wrap하지 않아서 아래와 같이 win32 api를 직접 제어해야 한다. SendMessage의 아규먼트로는 아래와 같이 IntPtr을 넣는 게 원칙이긴 한데 조금 더 복잡하다.

  • c# RichTextBox 출력 빠르게 하기

    RichTextBox.AppendText는 느리다. 수십 줄 출력하는 데에도 그려지는 게 보일 정도다. 아래의 방법들을 쓰면 빠르게 출력된다. RichTextBox.BeginUpdate/EndUpdate 만들기 일반적인 비주얼 컨트롤들의 경우 BeginUpdate/EndUpdate가 있다면 이걸 쓰는 게 빠르다. AppendText로 추가되는 내용을 바로바로 출력하는 게 아니라 출력을 멈췄다가 추가할 것들을 다 추가한 뒤 한꺼번에 출력하는 거다. 하지만 RichTextBox에는 BeginUpdate/EndUpdate가 없다. 아래와 같이 상속해서 써야 한다. String.Join 이용하기…