프로그래밍/C#

[C#]진행 상태를 확인할 수 있는 - ProgressBar

Dibrary 2021. 7. 30. 10:04
반응형

안녕하세요, Dibrary입니다.

이번에는 재밌는 것들을 해 볼 생각입니다. 

프로그램을 설치할 때, 설치 진행 상태를 나타내는 막대가 굉장히 천천히 이동했던 경험이 있으실 겁니다.

오늘 우리는 이 프로그램 설치 막대를 조종 해볼 겁니다.

 

가장 먼저 당연히 Visual Studio를 실행하고, 프로젝트 화면을 띄워주시면 됩니다.

기존에 만든 프로젝트에서 다른 프로젝트를 만들고 싶다면, 

 

여기서 제가 네모칸 친 부분에서 마우스 오른쪽 클릭하신 후에, 추가 -> 새 프로젝트 하시면 됩니다.

새 프로젝트는 다른 종류여도 됩니다만, 우리는 GUI를 할 것이니 Winform으로 해 주세요.

저는 앞전에 사용하던 프로젝트에 계속 이어서 해 볼 겁니다. (코드는 겹치는 것이 거의 없으니 걱정 안하셔도 됩니다.)

네 버튼 1개, label 1개, progressbar 1개 이렇게 끌어다 놓았습니다. (버튼 색이나 이런건 신경 안쓰셔도 됩니다.)

먼저 제가 해 볼 것은, 버튼을 눌러서 진행이 되게 하는 것입니다. 

  • 버튼을 누른다.
  • 누른 횟수 만큼이 누적된 값이 되어서 progressbar가 진행된다.
  • 마지막에 progressbar가 다시 초기화 된다.

 

우선 버튼을 더블클릭 하세요.

그리고 버튼을 누르면 실행되는 부분에 위와 같이 코드를 작성 했습니다.

얼추 코드가 쉬워서 눈에 보이시죠?

코드는 이렇게 진행됩니다.

  1. 버튼을 누르면 cnt값이 progressbar와 label에 적용된다.
  2. 그리고 cnt를 1 증가시킨다.
  3. 그 다음에 다시 버튼이 눌리면 똑같이 cnt값이 progressbar와 label에 적용되고 cnt를 증가시킨다.
  4. cnt가 99가 되면 cnt를 0으로 변경한다. (다시 처음부터)

 

과연 그런지 실행을 해 보시면 됩니다. (Ctrl + F5)

왼쪽은 첫 화면, 오른쪽은 22번 버튼을 누른 뒤의 화면

네 버튼 누를 때 마다 label위치의 숫자가 증가하고, progressbar가 늘어납니다.

 

여기서 끝내면 뭔가 재미 없죠?

자동으로 진행하는 progressbar도 한 번 만들어 보겠습니다.

자동으로 진행한다는 것은 무슨 의미일까요? 시간의 흐름을 프로그램이 인지하고 있다는 것입니다.

그러므로, 우리는 Timer를 사용해야 합니다. (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 값이 멈춘다.

과연 그런지 직접 실행 해 보세요.

아래의 progressbar는 자동으로 진행합니다.

굉장히 편하죠?

버튼을 계속 눌러서 값을 증가시키는 것이랑, 자동으로 증가하는 것이랑 차원이 다릅니다.

 

굉장히 재밌죠? GUI의 묘미는 이런 기능을 '연결'하는 데 있습니다.

지금은 물론 간단하지만, 좀 복잡할 경우 나중에 시간 순서 까지 고려해야 하기 때문에 쉽지 않습니다.

 

이것으로, 버튼 + 타이머 + progressbar 의 연결을 해 보았습니다.

728x90
반응형