C# (WPF)으로 로또 번호 생성 프로그램을 만들어 보자 (6)
C# (WPF)으로 로또 번호 생성 프로그램을 만들어 보자 (6)
이전(이전포스트)엔 지정한 회차 수만큼 읽어서 데이터 값을 텍스트 박스에 뿌렸는데 , 이번엔 텍스트 박스를 과감히 지우고 차트를 한번 만들어 봤다.
마지막 회차를 알아 내는걸 만들려다가 귀찮아서 포기, 크롤링을 하던지, 회차들 읽다가 데이터 없는 회차를 확인 하던지 할려고 했는데 흥미가 떨어져 이번 차트까지만 만들고 다른걸 해봐야 겠다.
일단은 차트는 구글링으로 또 찾아보니...
LIVECHART 라는 녀석이 있었다. 설치 방법은 그냥 검색만 하면 바로 나온다.
visual studio 에서 상단 도구 탭 -> NuGet 패키지 관리자 -> 솔루션용 NuGet 패키지 관리 에서 찾아보기 한다음 LiveCharts.WpF 를 설치하면 LiveCharts , LiveCharts.WpF 가 둘다 설치 된다고 하는데 난 LiveCharts 부터 설치해서 그냥 다 설치 했다.
그리고 시작은
XAML 에 xmlns:lvc1="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf" 를 추가한다.
xmlns: 뒤에 lvc1 은 그냥 아무거나 하고 싶은대로 난 이것저것 테스트하다가 lvc1 으로
그리고 난 내가 원하는 탭의 그리드 안쪽에 차트를 추가하는데, 도구상자에 없으니깐 좀 귀찮
추가하니 이러한 모양의 그래프가 생성되었다. 근데 난 막대 그래프를 원한다.
그건 series 에서 추가 하면 되는거 같으니 뒤에서 cs 소스에서 추가 해보자.......
세로축 value 값과, 가로축 값은 라벨로 일단 적용 했드아. 차트에 series 와 밸류가 없어서 임의로 저런 모양의 차트가 나오는것 같다.
그리고 원래 데이터 값을 바인딩 하여 쓰려고 했는데.. 테스트 해보다가 ... 값이 적용이 잘안되 그냥 매번 클리어 하고 새로 추가 하는 방식으로 했다.
이전 소스에서 스레드의 마지막 부분에 dispatcher 부분에 그래프 값을 변경해 주는걸 추가 했다.
Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate { textBox_json.Text = s; try { Chart.Series.Clear(); } catch (Exception ex) { Debug.WriteLine(ex); } Chart.Series.Add(new LiveCharts.Wpf.ColumnSeries() { Title = "횟수", Fill = Brushes.Orange, Values = new LiveCharts.ChartValues<int>(ints) }); ; button.IsEnabled = true; }));
Chart.Series.Clear() 는 series 쪽에 설정된것들을 지워 버리는것 같다.
아무래도 난 Chart.Series.Add 를 써서 데이터를 삽입 할꺼니, 차트를 그리기 전에 싹 날려주고 다시 그래프를 그렸다. 데이터값만 수정하고 싶었는데.. 그게 잘 안됬다.
이부분도 테스트를 계속 해봐야 겠다.
여튼 xaml 에 series 관련 소스를 추가하지 않아. Clear() 시 Null 값이 반환 된다고 오류가 발생하여 , try 문으로 강제로 집행! 없으면 없는데로 있으면 있는데로 해보자.
일단 해보는게 중요하니깐!!!
다 제작후 나온 프로그램은
이러하다. 그래프 위에 마우스 커서를 올리면 로또 번호 몇번 인지, 그 밑에 132 회로 자동으로 tip박스가 뜬다.
이전에 0값도 포함되어 있는 ARRAY 에서 첫번째 데이터를 삭제 시켜주고 진행했다.
data[] 배열이였는데 data = data.Skip(1).ToArray() 로 시작부터 1개의 데이터를 날려버렸다.
무료로 쓰기 아주 좋은 차트 라이브러리 였다.
이만 로또 프로그램은 여기서 종료를 하고 다른 재미있는걸 만들어 봐야겠다.
나중을 위해 소스들은 참고용으로 git 에 올려놔야겠다.
https://github.com/jeonghwanshin/LOTTO
빌드한 프로그램
마지막 6탄 끝.
댓글
댓글 쓰기