[c#] 닷넷 chart 클래스 구조

.net에는 차트를 그리기 위한 chart 클래스가 있다. 차트는 series로 구성된다. 시리즈는 일련의 데이터다. 예를 들면 주가를 나타내는 일봉들의 무리다. 주가 차트를 보면 연속되는 일봉들 아래에 거래량을 나타내는 막대들이 있듯이 하나의 차트에는 여러 개의 시리즈들을 만들 수 있다. chart 컨트롤을 폼에 만들면 Series1이라는 시리즈가 하나 자동으로 만들어진다. 이거는 Chart.Series[0]으로 엑세스할 수 있다. 시리즈는 DataPoint로 이뤄진다. 주가…

[c#] 닷넷에서 chart 클래스 이용하기

닷넷 프레임워크에는 차트 클래스가 있지만 닷넷에는 없다. 누겟으로 따로 설치해야 한다. tools > nuget package manager > manage nuget packages for solution > browse > WinFoms.DataVisualization 설치를 하면 툴박스에 WinFoms.DataVisualization 그룹이 생기고 그 안에 chart 컨트롤이 있다.

[c#] 그냥 닷넷과 닷넷 프레임워크의 차이

.net framework는 예전 꺼고 그냥 .net이라고만 하는 건 요새 꺼다. 전자를 다운로드하려 마이크로소프트 웹사이트에 접속하면 그냥 닷넷을 이용하라는 안내가 나온다. 닷넷 프레임워크는 이제 더 이상 버전 업이 되지 않는다. 닷넷 프레임워크가 버전 업 되던 시기에는 닷넷 코어라는 이름으로 서로를 구별했다. 이제 전자는 사라져 가게 되어 굳이 서로를 구별할 필요가 없게 되었다. 후자에서 코어라는 이름을 떼어…

[c#] BindingList와 DataGridView의 바인딩을 일시적으로 끊기

BindingList를 DataGridView에 바인딩한 뒤 잠깐 바인딩을 끊어야 할 때가 있다. 예를 들어 루프를 돌려 바인딩 리스트에 엘리먼트를 추가하는 경우 바인딩을 끊지 않으면 엘리먼트 하나가 추가될 때마다 데이터 그리드 뷰가 갱신되어 부하가 커진다. 간단하게 아래의 방법을 생각해 볼 수 있지만 무식하고 부하가 크고 데이터 그리드 뷰의 일부 설정들이 초기화된다. BindingSource1.RaiseListChangedEvents 프라퍼티를 이용하면 간단하다. 아래의 예제에서 버튼…

[c#] BindingList를 DataGridView에 바인딩할 때 생기는 버그들

아래의 코드는 클래스가 담긴 BindingList를 DataGridView에 바인딩하는 예제다. 그저 바인딩만 했을 뿐이지만 빈 엘리먼트가 바인딩 리스트에 저절로 만들어지고 데이터 그리드 뷰에 출력까지 된다. 이 문제를 우회하는 데에는 두 개의 방법들이 있다. 1. Form_Load 아닌 이벤트에서 바인딩을 한다.2. DataGridView.AllowUserToAddRows를 false로 한다. 아래의 버그는 위의 버그와 연결되어 있다. 위 코드에 덧붙여 Form_Click 이벤트에서 BindingList.Add 메서드를 실행하면 System.InvalidOperationException:…

[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투명로 해도 되지만 이렇게 하면 글꼴이 굵게 나왔다 보통으로 나왔다 하는 버그가 있다.