[c#] 차트의 y축을 셋 이상으로 하기
하나의 ChartArea에는 최대 두 개씩의 x축들과 y축들이 제공된다. 각각 위와 아래, 왼쪽과 오른쪽에 위치하게 된다. 하지만 더 많이 필요할 때도 있다. 예를 들어 크기가 많이 다른 세 개의 시리즈들을 하나의 y축에 선 차트로 그리면 일부는 그저 수평선 비슷하게 나올 거다. 각 시리즈의 절대적인 값이 아닌 변화되는 정도를 세 개의 시리즈들 한꺼번에 비교하려 할 땐 각…
하나의 ChartArea에는 최대 두 개씩의 x축들과 y축들이 제공된다. 각각 위와 아래, 왼쪽과 오른쪽에 위치하게 된다. 하지만 더 많이 필요할 때도 있다. 예를 들어 크기가 많이 다른 세 개의 시리즈들을 하나의 y축에 선 차트로 그리면 일부는 그저 수평선 비슷하게 나올 거다. 각 시리즈의 절대적인 값이 아닌 변화되는 정도를 세 개의 시리즈들 한꺼번에 비교하려 할 땐 각…
차트 예제들을 찾아보면 하나 같이 x 값과 y 값을 만들어서 그린다. 그럴 필요 없이 간단하게 x 데이터 없이 List<int>만으로도 구현할 수 있다. 아래의 코드는 그냥 수직선으로 출력된다. x 값을 따로 설정하지 않아서 하나의 x 좌표 위에 겹쳐서 그려지니 그렇다. 굳이 루프를 돌려 별 의미 없이 단순히 증가하는 x 값을 만들기 위해 코드를 추가하지 않아도 된다….
.net에는 차트를 그리기 위한 chart 클래스가 있다. 차트는 series로 구성된다. 시리즈는 일련의 데이터다. 예를 들면 주가를 나타내는 일봉들의 무리다. 주가 차트를 보면 연속되는 일봉들 아래에 거래량을 나타내는 막대들이 있듯이 하나의 차트에는 여러 개의 시리즈들을 만들 수 있다. chart 컨트롤을 폼에 만들면 Series1이라는 시리즈가 하나 자동으로 만들어진다. 이거는 Chart.Series[0]으로 엑세스할 수 있다. 시리즈는 DataPoint로 이뤄진다. 주가…
닷넷 프레임워크에는 차트 클래스가 있지만 닷넷에는 없다. 누겟으로 따로 설치해야 한다. tools > nuget package manager > manage nuget packages for solution > browse > WinFoms.DataVisualization 설치를 하면 툴박스에 WinFoms.DataVisualization 그룹이 생기고 그 안에 chart 컨트롤이 있다.
.net framework는 예전 꺼고 그냥 .net이라고만 하는 건 요새 꺼다. 전자를 다운로드하려 마이크로소프트 웹사이트에 접속하면 그냥 닷넷을 이용하라는 안내가 나온다. 닷넷 프레임워크는 이제 더 이상 버전 업이 되지 않는다. 닷넷 프레임워크가 버전 업 되던 시기에는 닷넷 코어라는 이름으로 서로를 구별했다. 이제 전자는 사라져 가게 되어 굳이 서로를 구별할 필요가 없게 되었다. 후자에서 코어라는 이름을 떼어…
BindingList를 DataGridView에 바인딩한 뒤 잠깐 바인딩을 끊어야 할 때가 있다. 예를 들어 루프를 돌려 바인딩 리스트에 엘리먼트를 추가하는 경우 바인딩을 끊지 않으면 엘리먼트 하나가 추가될 때마다 데이터 그리드 뷰가 갱신되어 부하가 커진다. 간단하게 아래의 방법을 생각해 볼 수 있지만 무식하고 부하가 크고 데이터 그리드 뷰의 일부 설정들이 초기화된다. BindingSource1.RaiseListChangedEvents 프라퍼티를 이용하면 간단하다. 아래의 예제에서 버튼…
아래의 코드는 클래스가 담긴 BindingList를 DataGridView에 바인딩하는 예제다. 그저 바인딩만 했을 뿐이지만 빈 엘리먼트가 바인딩 리스트에 저절로 만들어지고 데이터 그리드 뷰에 출력까지 된다. 이 문제를 우회하는 데에는 두 개의 방법들이 있다. 1. Form_Load 아닌 이벤트에서 바인딩을 한다.2. DataGridView.AllowUserToAddRows를 false로 한다. 아래의 버그는 위의 버그와 연결되어 있다. 위 코드에 덧붙여 Form_Click 이벤트에서 BindingList.Add 메서드를 실행하면 System.InvalidOperationException:…
리스트에 정수나 문자열 같이 하나의 데이터 타입만 담겨 있는 경우와 클래스처럼 구조화된 객체가 저장된 경우에는 소트를 하는 방법이 다르다. 전자의 경우에는 여러 소트 로직들을 바로 이용하면 되지만 후자의 경우에는 좀 더 복잡하다. 클래스를 엘리먼트로 하는 리스트를 소트하는 데에는 여러 방법들이 있다. 대표적인 방법들은 아래와 같다. 기본적으로 List.Sort 메서드를 이용하는 방법이 있다. 가장 빠르지만 코드가 길다….
비주얼 객체는 메인 스레드에서 만들어진다. 메인 스레드 아닌 스레드에서 비주얼 객체를 읽는 건 괜찮은데 쓰려고 하면 제대로 되지 않을 수 있다. 되고 안 되고는 운에 달려 있기 때문에 원칙적으로 저런 시도는 크로스-스레드 예외로 처리된다. 그러나 이러한 모든 시도들이 예외로 처리되는 건 아니라서 주의하는 게 좋다. 아래의 코드는 메인 스레드 아닌 스레드에서 DataGridView의 행을 바꾸는 예제다….