c#

  • c# INotifyPropertyChanged를 이용하여 BindingList를 DataGridView에 연결하기

    DataGridView에 연결하는 컬렉션으로 크게 List, BindingList, DataTable 세 가지를 이용한다. List에는 아이템을 추가하거나 삭제한 때 DataGridView에 반영되지 않는 문제가 있다. DataTable는 느려서 이용하기 곤란할 때가 있다. BindingList에는 아이템을 수정한 때 DataGridView에 반영되지 않는 단점이 있다. windows forms 애플리캐이션에서 BindingList를 DataGridView에 연결하고 전자의 아이템 값이 바뀐 때 이 값을 DataGridView에 반영하려면 INotifyPropertyChanged 인터패이스를 쓰는 게 제일…

  • c# BindingList sort

    DataGridView에 연결하여 쓸 때 List는 sort가 쉽지만 그 결과가 바로 반영되지 않는다. DataSource = Null을 한 뒤 다시 바인드를 하면 되지만 칼럼 설정이 초기화된다. sort 결과를 바로 반영하려면 BindingList를 써야 한다. 하지만 이건 sort를 제공하지 않는다. 무식해 보여도 BindlingList를 List로 바꾼 뒤 다시 BindlingList로 바꾸는 게 제일 간단하다. 바인드는 새로 해 줘야 한다.

  • ls증권 api는 유니코드가 아니라 앤시로 구현되어 있다

    현재 윈도우즈 프로그래밍은 유니코드를 기본으로 한다. 하지만 ls증권의 api는 비주얼 스투디오 6를 기반으로 하므로 ansi로 구현되어 있다. 버전 6이 나온 1998년에는 앤시가 기본이었다. 2000년 지나 unicode가 널리 쓰이기 시작했다. 윈도우즈 api들도 앤시가 기본이다. 과거 프로그램들과의 호환을 위해서 그렇다. 따로 unicode로 캐릭터 셋을 설정하지 않으면 앤시로 처리된다. 그럼에도 불구하고 윈도우즈 api를 임포트하면 비주얼 스투디오가 유니코드로 설정하라고…

  • [.net] LibraryImport 인텔리센스 오류 – 일단 컴파일하라

    최신 버전의 .넷은 DllImport 대신 LibraryImport를 쓰라고 경고한다. 위와 같이 access modifier와 static partial을 써야 한다. access modifier는 생략할 수 없다. static이므로 더 빠르고 partial이므로 눈에 보이지 않는 어딘가에서 따로 작업이 이뤄지는 걸 알 수 있다. 컴파일을 하면 추가 코드가 자동으로 만들어진다. 이게 문제다. 컴파일을 하여 자동으로 implementation code가 생기기 전에는 인텔리센스가 오류로 인식한다. 이를…

  • [.net] DateTime.UTCNow + TimeSpan이 DateTime.Now보다 빠르다

    DateTime.Now와 DateTimeOffset.Now는 느리고 DateTime.UTCNow는 빠르다. 후자를 이용해 한국 시간을 알려면 9시간을 더해야 한다. 그렇다면 이렇게 구한 시간과 전자 가운데 어느 게 더 빠를까? chatgpt는 전자가 더 빠르다고 답하기도 하고 반대로 답하기도 한다. 물어볼 때마다 다르다. 전자가 더 느리다. 표준 시간과의 차이를 표준 시간에 더하느라 조금 느려지기는 하지만 Now보다는 빠르다. 10% 넘게 차이난다.

  • c# 더블 버퍼를 이용하여 DataGridView 빠르게 출력하기 – Control을 상속하는 모든 객체 가능

    DataGridView는 더블 버퍼로 작동할 수 있지만 이 설정이 드러나 있지는 않다. 더블 버퍼를 작동하게 하려면 아래와 같이 한다. 더 복잡한 방법들이 있는데 위의 코드가 제일 간단하다. DataGridView는 Control을 상속한다. Control은 DoubleBuffered 프라퍼티를 protected로 선언했다. 따라서 이 객체를 상속한 객체는 원칙적으로 이 프라퍼티에 접근할 수 없다. 이렇게 숨긴 의도는 알 수 없다. 여러 설명들이 있지만 모두…

  • 비주얼 스투디오 익스텐션 색 출력 문제 – 커뮤니티 툴키츠

    비주얼 스투디오 익스텐션을 만들려면 vsix 프로젝트를 만들어야 한다. 솔루션 익스플로러 같은 창을 만들려면 tool window를 만들어야 한다. 빈 vsix 프로젝트에 tool window를 만들려면 파일들을 몇 개 추가해야 한다. 파일들을 직접 만들어 추가해도 되고 아래와 같이 편하게 할 수도 있다. 만들어진 xaml 파일을 열고 아래와 같이 TreeView 코드를 추가한다. 디버그를 시작하면 비주얼 스투디오가 새로 실행된다. 이걸…

  • c# 패러미터를 갖는 컨스트럭터가 있는 배이스 클래스를 상속하기

    배이스 클래스에 패러미터를 가진 컨스트럭터가 있으면 디라이브드 클래스는 컨스트럭터를 만들고 배이스 클래스에 아규먼트를 넘겨야 한다. 배이스 클래스와 다르게 작동시키려면 아래와 같이 해도 된다. 하지만 저러면 상속하는 의미가 없다. 이 경우에도 배이스 클래스에 무언가는 넘겨야 한다.

  • c#으로 키움증권 영웅문 글로벌 제어하기 – 종목 변경

    영웅문 글로벌은 4와 비슷해 보이지만 다르게 작동한다. wm_settext와 wm_keydown을 연달아 보내면 전자만 작동하고 후자는 작동하지 않는다. 4와 달리 종목 코드를 입력하는 edit에 wm_settext로 문자열을 보내 입력하는 거로는 충분하지 않다. 이 에디트는 표준 윈도우즈 컨트롤이 아니다. 키를 하나씩 눌러 입력해 보면 각 동작에 드롭 다운 리스트가 작동하는 걸 확인할 수 있다. 이렇게 드롭 다운 리스트가 작동하는…