[C#]진행 상태를 확인할 수 있는 - ProgressBar
안녕하세요, Dibrary입니다.
이번에는 재밌는 것들을 해 볼 생각입니다.
프로그램을 설치할 때, 설치 진행 상태를 나타내는 막대가 굉장히 천천히 이동했던 경험이 있으실 겁니다.
오늘 우리는 이 프로그램 설치 막대를 조종 해볼 겁니다.
가장 먼저 당연히 Visual Studio를 실행하고, 프로젝트 화면을 띄워주시면 됩니다.
기존에 만든 프로젝트에서 다른 프로젝트를 만들고 싶다면,
여기서 제가 네모칸 친 부분에서 마우스 오른쪽 클릭하신 후에, 추가 -> 새 프로젝트 하시면 됩니다.
새 프로젝트는 다른 종류여도 됩니다만, 우리는 GUI를 할 것이니 Winform으로 해 주세요.
저는 앞전에 사용하던 프로젝트에 계속 이어서 해 볼 겁니다. (코드는 겹치는 것이 거의 없으니 걱정 안하셔도 됩니다.)
네 버튼 1개, label 1개, progressbar 1개 이렇게 끌어다 놓았습니다. (버튼 색이나 이런건 신경 안쓰셔도 됩니다.)
먼저 제가 해 볼 것은, 버튼을 눌러서 진행이 되게 하는 것입니다.
- 버튼을 누른다.
- 누른 횟수 만큼이 누적된 값이 되어서 progressbar가 진행된다.
- 마지막에 progressbar가 다시 초기화 된다.
우선 버튼을 더블클릭 하세요.
그리고 버튼을 누르면 실행되는 부분에 위와 같이 코드를 작성 했습니다.
얼추 코드가 쉬워서 눈에 보이시죠?
코드는 이렇게 진행됩니다.
- 버튼을 누르면 cnt값이 progressbar와 label에 적용된다.
- 그리고 cnt를 1 증가시킨다.
- 그 다음에 다시 버튼이 눌리면 똑같이 cnt값이 progressbar와 label에 적용되고 cnt를 증가시킨다.
- cnt가 99가 되면 cnt를 0으로 변경한다. (다시 처음부터)
과연 그런지 실행을 해 보시면 됩니다. (Ctrl + F5)
네 버튼 누를 때 마다 label위치의 숫자가 증가하고, progressbar가 늘어납니다.
여기서 끝내면 뭔가 재미 없죠?
네 자동으로 진행하는 progressbar도 한 번 만들어 보겠습니다.
자동으로 진행한다는 것은 무슨 의미일까요? 시간의 흐름을 프로그램이 인지하고 있다는 것입니다.
그러므로, 우리는 Timer를 사용해야 합니다. (Timer는 도구상자에 있고, 드래그 앤 드롭 하더라도 이미지가 보이지는 않습니다.)
Timer와 progressbar를 하나 더 추가한 모습입니다. (버튼 한 개도 더 추가 했습니다.)
저는 버튼을 누르면 타이머가 동작하면서 아래에 새로 추가한 progressbar가 진행되게 하고 싶습니다.
추가한 버튼을 더블클릭 해서 코드 편집을 해보죠.
button2가 눌리면 두 줄이 조건에 따라 다르게 실행 됩니다.
timer1가 Enabled라면, Stop시키고, 그렇지 않다면 Start 시키는 겁니다.
꺼져있으면 켜고, 켜져있으면 끈다는 것이죠.
근데 아까 사용한 코드랑 if - else문장 형태가 좀 다르죠?
저는 원래 이렇게 쓰는 꼴을 선호합니다.
코딩 연습을 하시면서 아래 문장은 꼭 기억해 두세요.
고급 개발자는 보기 좋은 코드를 만든다.
비록 사소한 코드라 할 지라도, 습관으로 이어질 수 있기 때문에, 자신에게 맞는 그리고 어떻게 보더라도 깔끔해 보이게 코드를 쓰려고 하시면 좋습니다.
이제 버튼을 눌러서 타이머를 켜고 끄는건 코드작성이 끝났으니, 타이머가 동작을 어떻게 할지 작성 해 보겠습니다.
아까 화면에서 보인 timer1를 더블클릭 하세요.
버튼 더블클릭 했을 때 처럼 코드 작성하는 부분이 생겼죠?
저는 이렇게 작성했습니다.
1. if ( progressBar2.Value == 100 ) { progressBar2.Value = 0; }
progressbar2의 값이 100이 된다면, 0으로 초기화 한다.
2. else { progressBar2.Value += 1; }
progressbar2의 값을 1씩 증가시킨다.
코드가 매우 간단하죠? 요약해보면
- 버튼을 눌러서 타이머를 켠다.
- progressbar2값이 1씩 증가한다.
- progressbar2값이 100이 되면 다시 0으로 돌아가서 반복한다.
- 버튼을 한 번 더 누르면 progressbar2 값이 멈춘다.
과연 그런지 직접 실행 해 보세요.
굉장히 편하죠?
버튼을 계속 눌러서 값을 증가시키는 것이랑, 자동으로 증가하는 것이랑 차원이 다릅니다.
굉장히 재밌죠? GUI의 묘미는 이런 기능을 '연결'하는 데 있습니다.
지금은 물론 간단하지만, 좀 복잡할 경우 나중에 시간 순서 까지 고려해야 하기 때문에 쉽지 않습니다.
이것으로, 버튼 + 타이머 + progressbar 의 연결을 해 보았습니다.