c#

  • [c#] 클래스를 담고 있는 List 소트하기

    리스트에 정수나 문자열 같이 하나의 데이터 타입만 담겨 있는 경우와 클래스처럼 구조화된 객체가 저장된 경우에는 소트를 하는 방법이 다르다. 전자의 경우에는 여러 소트 로직들을 바로 이용하면 되지만 후자의 경우에는 좀 더 복잡하다. 클래스를 엘리먼트로 하는 리스트를 소트하는 데에는 여러 방법들이 있다. 대표적인 방법들은 아래와 같다. 기본적으로 List.Sort 메서드를 이용하는 방법이 있다. 가장 빠르지만 코드가 길다….

  • [c#] 크로스-스레드인데 예외로 처리되지 않는 경우

    비주얼 객체는 메인 스레드에서 만들어진다. 메인 스레드 아닌 스레드에서 비주얼 객체를 읽는 건 괜찮은데 쓰려고 하면 제대로 되지 않을 수 있다. 되고 안 되고는 운에 달려 있기 때문에 원칙적으로 저런 시도는 크로스-스레드 예외로 처리된다. 그러나 이러한 모든 시도들이 예외로 처리되는 건 아니라서 주의하는 게 좋다. 아래의 코드는 메인 스레드 아닌 스레드에서 DataGridView의 행을 바꾸는 예제다….

  • [c#] task를 이용한 간단한 멀티스레드 예제

    닷넷 환경에서 c#으로 멀티스레드를 구현하려면 task parallel library를 쓰는 게 제일 좋다. task를 이용하는 가장 좋은 방법은 TaskFactory.StartNew나 TaskFactory<TResult>.StartNew 메서드를 쓰는 거다. Task.Run이 더 간단하지만 이건 아규먼트를 넘길 수 없다. 아래 예제는 클래스 하나를 바인딩 리스트에 담은 뒤 새로 스레드를 만들어 여기에서 바인딩 리스트의 아이템을 바꾸는 거다. In .NET Framework 4, the TPL is the…

  • [c#] DataGridView의 선택된 셀을 파랗게 보이지 않게 하기

    DataGridView가 출력되면 셀 하나가 파랗게 선택되어져 있는 게 기본 설정이다. 이걸 보이지 않게 하려면 선택된 셀의 배경 색과 글꼴 색을 다른 셀들의 그것들로 바꾸면 된다. 속성 창을 통해 DefaultCellStyle의 SelectionBackColor는 Window로 SelectionForeColor는 WindowText로 바꾼다. SelectionBackColor를 transparent투명로 해도 되지만 이렇게 하면 글꼴이 굵게 나왔다 보통으로 나왔다 하는 버그가 있다.

  • [c#] DataGridView 헤더에 DisplayName으로 이름 출력하기

    클래스를 List 등에 담아 DataGridView에 바인딩하면 클래스의 프라퍼티 이름이 DataGridViewColumn.HeaderText가 되어 헤더에 출력된다. 하지만 대부분의 경우 프라퍼티 이름과는 다른 이름을 출력해야 한다. 이럴 땐 DataGridView애트리뷰트를 이용하면 된다.

  • [c#] DataGridView의 헤더와 셀 레이아웃 얼라인먼트(정렬)

    행이나 열의 헤더 레이아웃 얼라인먼트를 설정하려면 굳이 코드를 작성하는 거보단 속성 창의 ColumnHeadersDefaultCellStyle이나 RowHeadersDefaultCellStyle에서 alignment 값을 설정하는 게 간단하다. 칼럼 헤더의 레이아웃 얼라인먼트를 가운데로 해도 문자열은 한가운데에 출력되지 않고 오른쪽으로 해도 오른쪽 끝에 붙지 않는다. 칼럼 헤더에는 소트 기능이 있는데 칼럼 헤더를 클릭하면 헤더의 오른쪽 끝에 삼각형 두 개가 위아래로 나타난다. 이게 출력될 자리를 확보해…

  • [c#] 삼항연산자로 조건문 간결하게 하기

    삼항연산자 또는 삼항 조건 연산자ternary conditional operator ?:를 이용하면 조건문을 간결하게 할 수 있다. ternary는 ‘세 개를 한 묶음으로 하는 것’이라는 뜻이다. 예를 들면 정수를 담은 리스트가 있다. 아이템들 개수가 열 개 이상이면 앞의 열 개만 2로 바꾸고 열 개 미만이면 모든 아이템들을 2로 바꾼다. 삼항연산자를 써서 아래와 같이 바꿀 수 있다.

  • c# 액세스 모디파이어를 생략한 경우 처리되는 기본 값

    access modifier가 마이크로소프트 한글 문서에는 액세스 한정자라고 번역되어 있다. modify는 ‘수정한다’는 뜻 말고도 ‘수식한다’라는 의미도 갖는다. 형용사가 명사를 수식하듯이 대상의 뜻을 분명하게 한다는 뜻이다. 제한자라고 번역하는 건 틀리다. 마이크로소프트 문서에는 ‘특정한다specify‘고 기술되어 있다. 구글로 검색해 보면 그냥 액세스 모디파이어라고 하는 게 제일 많이 쓰인다. 액세스 모디파이어는 생략할 수 있다. 클래스의 멤버들인 경우에는 생략하면 private로 처리된다….