c#

  • c# 디스플래이 배율 변경에 따른 애플리캐이션의 모양 변경 막기

    기술이 좋아져서 예전보다 커다란 모니터를 비싸지 않은 가격에 살 수 있게 되었다. 웹 써핑이나 할 때에는 큰 모니터가 특별히 필요하지는 않지만 금융 상품 매매를 할 때에는 큰 게 좋다. 차트를 크게 보면 더 긴 기간을 확인할 수 있고 매매 애플리캐이션을 쓸 때에도 여러 정보들을 동시에 나오게 하여 보는 게 일반적이기 때문이다. 모니터의 물리적인 크기가 커지고…

  • c# 여러 비주얼 컴포넌트들을 하나의 이벤트 메떠드로 제어하기

    아래의 코드는 두 개의 버튼들을 하나의 배열에 넣고 하나의 이벤트 메떠드로 제어하는 예제다. 리스트에 넣어도 된다. Buttons[0].Click +=까지만 입력하고 탭 키를 누르면 이벤트 메떠드가 자동으로 만들어진다. 위의 코드를 실행하고 버튼을 클릭하면 button1나 button2가 출력된다. 그러나 아래의 코드는 다르다. 버튼의 경우와는 달리 그냥 DataGridView라고만 나온다. 따라서 두 개의 DataGridView들 가운데 어느 건지 모를 거 같다. 그러나…

  • c# List를 ListBox에 바인드하기

    List는 ListBox와 DataGridView에 바인드할 수 있다. ListBox는 단순하여 그 쓸모가 제한적이므로 실무에서 자주 이용되지는 않는다. ListBox는 ListControl을 상속하며 ListControl은 ListBox와 ComboBox로 파생된다. ListBox와 ComboBox는 형제로서 전자는 후자를 드롭 다운한 형태로 보면 된다. 원칙적으로 ComboBox처럼 하나의 열만 가질 수 있고 예외적으로 MultiColumn 프라퍼티를 참으로 하여 여러 열들을 가질 수 있다. 그러나 이는 여러 개의 관념적인 열들을…

  • c# 레퍼런쓰 타잎 객체를 뜨레드의 아규먼트로 이용할 때 주의할 점

    레퍼런쓰 타잎 객체를 뜨레드의 아규먼트로 이용하면 뜨레드에서 처리되는 동안 객체의 값이 바뀐 경우 뜨레드가 전달 받은 객체가 아닌 바뀐 객체가 뜨레드 안에서 이용되는 문제가 생긴다. 예를 들어 WndProc으로 윈도우즈의 특정 메씨지를 잡아서 이걸 아규먼트로 하여 뜨레드를 만들어 돌리는 경우를 생각해 볼 수 있다. 이베스트투자증권의 api를 이용하여 주식 등의 가격을 처리할 때가 이렇다. 삼성전자의 현재 가격을…

  • c# 대이터 래이스를 막는 lock의 유효 범위

    아래의 코드는 대이터 래이스를 일어나게 하는 예제다. start debugging을 하면 오류로 인해 실행되지 않고 start without debugging을 하면 대이터 래이스를 확인할 수 있다. 위 예제에서 TestClass1은 서로 다른 뜨레드에서 실행되는 서로 다른 메떠드로 보내진다. 서로 다른 뜨레드에서 실행되는 하나의 메떠드에서는 lock으로 쉽게 대이터 래이스를 막을 수 있지만 위와 같은 경우에도 그럴까? 그렇다. 아래의 코드는 대이터…

  • c# 변수를 파일로 읽고 쓰기 – application settings

    애플리캐이션을 만들다 보면 많은 변수들이 쓰인다. 변수들 가운데에는 애플리캐이션을 종료한 때 파일로 저장했다가 애플리캐이션을 다시 실행한 때 그대로 불러다 읽어서 써야 하는 것들이 있다. 이 과정은 개념적으로 간단하지만 구현하려면 까다롭고 번거롭다. 일반적으로 변수에는 이름을 붙여서 쓴다. 리스트나 배열의 아이템을 변수로 이용할 수도 있지만 이렇게 하면 이름이 아닌 인덱스로 접근해야 하므로 실수를 할 가능성이 크다. 변수의…

  • c# 프로젝트가 바이러스로 인식되는 문제의 해결 방법

    c#도 그렇고 델파이도 그렇고 애플리캐이션이나 라이브러리를 빌드하면 바이러스로 인식되는 경우들이 흔하다. 이런 경우 대부분은 바이러스 검색 로직의 문제로서 여러 검색 프로그램들 가운데 일부만 그렇게 잡아 내기 때문에 무시하고 그냥 쓰면 되는데 그 일부에 윈도우즈 디펜더가 포함된다면 문제가 좀 달라진다. 무시하기가 힘들기 때문이다. 이런 경우 프로그램을 이용하는 입장에서는 백신 프로그램이나 윈도우즈 디펜더에서 해당 파일을 예외로 처리하게…