2024. 4. 2. 22:31ㆍ개발/C#
C# 윈폼을 활용해서 동적차트를 만들어보았다.
차트 내에 여러개의 그래프가 있고,
그래프의 데이터는 List로 관리
데이터 저장 기능까지 구상하고 시작했다.
3종류의 데이터를 받아서, 차트로 표현했다.
x축은 총 10개의 데이터가 나타나고
1초마다 값이 업데이트된다.
윈폼이 실행되면, 로딩이 완료된 뒤 Start 이벤트를 발생시킨다.
Start이벤트는 차트 관련 설정들을 세팅하고
데이터 생성 스레드를 실행한다.
차트와 관련된 설정들을 기입했다.
아래 사진처럼 윈폼상에서 미리 설정해둬도 되지만,
프로그램을 실행하면서
유동적으로 값을 변경하기 위해, 코드상으로 정의해뒀다. ( 나중에 수정할 부분을 찾기 편하도록 )
GenerateData() 함수는, 랜덤 데이터를 생성하는 함수다.
지금은 데이터가 없어서 임의로 데이터를 생성하고,
그 데이터들을 List에 저장 후
그래프 업데이트 로직에서 List의 데이터를 꺼내 화면에 표현한다.
추후에 다른 화면에 차트기능을 넣을때는
직접 장비의 데이터를 읽어서 List에 넣고, 그 List로 차트에 표현할 예정이다.
파란색 그래프(유효전력)의 데이터를 생성하는 함수다.
나머지 그래프들도 동일한 모듈로 동작한다.
데이터 생성이 완료되면,
DrawGraph()를 실행하는데,
윈폼 UI를 외부 스레드에서 변경 시 충돌이 발생해
BeginInvoke()를 활용해서 비동기적으로 처리했다.
그래프별 초기값을 세팅하고,
List(graphData_blue)의 데이터를 차트(Series)에 세팅한다.
세팅 완료 후, 각각 그래프를 chart1 객체에 추가한다.
이건 플래그 관리 함수 및
데이터 저장 함수다.
사실 기능구현 보다는, UI 크기 조절 시
유동적으로 컴포넌트들의 위치와 크기를 조절하는게 애먹었다.
윈폼을 많이 안다뤄보기도 했고,
Panel의 역할을 정확히 이해하지 못했기 때문이다.
애초에 윈폼은 대부분의 기능을 구현할 수 있도록 설계되어있어서
기능 구현은 크게 어렵지 않았다.
다만 예외처리나, 사용자의 입장에서 생각하는 설계? 적인 부분이
아직까지도 너무 어렵고 바로바로 떠오르지 않는다.
'개발 > C#' 카테고리의 다른 글
Modbus TCP 제어 ( 패킷 과수신 대비 ) (3) | 2024.03.06 |
---|---|
Encoding (1) | 2024.02.14 |
C# - class & structure (1) | 2024.02.10 |
소프트웨어 설계 수정 (0) | 2024.01.08 |
모니터링 자동화 - API Parsing (1) | 2024.01.01 |