C# 선그래프

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