본문 바로가기

코오딩/_C#

C# 계산기시도하기-2

반응형

오늘 이모양으로 만들었다.

이제 좀 그래도 그럴듯해보이지않은가.

먼저 저번시간에 한 HelloLabel의 이름을 성_계(산기)로 바꿔줬다. 그리고 Font 탭에서 글자크기를 15로 키워줬다.

그다음 여태 했던것과 같이 Label을 끌어와서 숫자입력칸을 만들어줬다.

버튼을 끌어와서 +부터 만들어주도록 하자. 버튼은 그냥 버튼이다. 

이름을 sum_numbers라고 해주고 폰트는 굴림, 30pt, 사이즈는 60,60 정사각형 사이즈로 만들고 Text부분에 + 하나만 딱 쳐주었다. 그리고 

이벤트 버튼을 눌러 클릭으로가서 클릭 부분을 더블클릭 해준다.

그리고 이렇게 쳐주도록 하자.

private void sum_numbers_Click(object sender, EventArgs e)
        {
            int number1 = Convert.ToInt32(input1.Text);
            int number2 = Convert.ToInt32(input2.Text);
            //Convert => system에 포함. 맨위에 using System이 있기에 사용 가능함.
            //int는 그냥 32임 사이즈가.
            //Convert 사용법 => Convert.To바꾸고싶은자료형(바꿀대상)

            int sum = number1 + number2;
            resultbox.Text = Convert.ToString(sum);
        }

이게 무슨뜻이냐면

int number1 변수에다가 input1에 들어온 (첫번째상자) 텍스트를 입력받겠다는 뜻인데.

Convert는 변환한다는 뜻이다. 처음에 들어오는 텍스트가 String 형태이다. String은 숫자뿐만아니라 글자도 들어갈 수 있어서 크기가 큰데. 우린 고작 숫자놀음이라 그정도까진 필요없지않은가. 그래서 int 32형으로 바꿔서  number에 저장한다.

똑같이 number2에도 똑같이 해준다.

그 다음 sum이라는 변수에 number1과 number2를 더해서 집어넣고

결과값은 resultbox라고 저장해뒀었다. 거기에다가 string형으로 바꿔서 넣는데 여긴 왜 이러냐면

계산은 int형으로 계산해서 결과값을 얻었는데. 출력을 할때는 text형태로 출력이 된다. 그러기 위해서 이 숫자값을 텍스트인척 해줘야하기 때문에 바꿔서 출력한다.

 

이 과정을 반복하면 4개의 상자가 나오고 4개를 다 가져다 놓을 수 있게 된다.

private void sum_numbers_Click(object sender, EventArgs e) //+
        {
            int number1 = Convert.ToInt32(input1.Text);
            int number2 = Convert.ToInt32(input2.Text);
            //Convert => system에 포함. 맨위에 using System이 있기에 사용 가능함.
            //int는 그냥 32임 사이즈가.
            //Convert 사용법 => Convert.To바꾸고싶은자료형(바꿀대상)

            int sum = number1 + number2;
            resultbox.Text = Convert.ToString(sum);
        }

        private void minus_numbers_Click(object sender, EventArgs e) //-
        {
            int number1 = Convert.ToInt32(input1.Text);
            int number2 = Convert.ToInt32(input2.Text);
            
            int minus = number1 - number2;
            resultbox.Text = Convert.ToString(minus);
        }

        private void x_numbers_Click(object sender, EventArgs e) // *
        {
            int number1 = Convert.ToInt32(input1.Text);
            int number2 = Convert.ToInt32(input2.Text);
            
            int multi = number1 * number2;
            resultbox.Text = Convert.ToString(multi);
        }

        private void div_numbers_Click(object sender, EventArgs e) // /
        {
            int number1 = Convert.ToInt32(input1.Text);
            int number2 = Convert.ToInt32(input2.Text);
            
            int div = number1 / number2;
            resultbox.Text = Convert.ToString(div);
        }

이제 여기서, 우리는 당연히 숫자만 넣을거라고 생각하지만 실제로 쓰는 사람들은 그런것을 모른다. 따라서 그런것을 해결하기 위해서 우리는 숫자만 넣을 수 있게 작업을 할 것이다.

 private void sum_numbers_Click(object sender, EventArgs e) //+
        {
            /*
             * if (input1.Text == "")//in case of blank
            {
                MessageBox.Show("숫자를 넣어주세요.");
                return;

            }
            if (input2.Text == "")
            {
                MessageBox.Show("숫자를 넣어주세요.");
                return;
            }

            ///////////////////////////////////////////////////////
            ///string IsNullOrWhiteSpace 함수 이용\
            ///
            ///if (String.IsNullOrWhiteSpace(input1.Text))  // in case of other. like spacebar..String.IsNullOrWhiteSpace(input1.Text)
            {
                MessageBox.Show("숫자를 넣어주세요.");
                return;
                //이 이벤트 탈출
                //int형이면 return0;

            }
            if (String.IsNullOrWhiteSpace(input2.Text))
            {
                MessageBox.Show("숫자를 넣어주세요.");
                return;
            }
            int number1 = Convert.ToInt32(input1.Text);
            int number2 = Convert.ToInt32(input2.Text);
            //Convert => system에 포함. 맨위에 using System이 있기에 사용 가능함.
            //int는 그냥 32임 사이즈가.
            //Convert 사용법 => Convert.To바꾸고싶은자료형(바꿀대상)

            int sum = number1 + number2;
            resultbox.Text = Convert.ToString(sum);
        }
            */
            if (int.TryParse(input2.Text, out number2) == false)
                {

                MessageBox.Show("숫자를 넣어주세요.");
                input1.Focus();
                return;
                //이 이벤트 탈출
                //int형이면 return0;

            }
            if (String.IsNullOrWhiteSpace(input2.Text))
            {
                MessageBox.Show("숫자를 넣어주세요.");
                input2.Focus();
                return;
            }
            number1 = Convert.ToInt32(input1.Text);
            number2 = Convert.ToInt32(input2.Text);
            //Convert => system에 포함. 맨위에 using System이 있기에 사용 가능함.
            //int는 그냥 32임 사이즈가.
            //Convert 사용법 => Convert.To바꾸고싶은자료형(바꿀대상)

            int sum = number1 + number2;
            resultbox.Text = Convert.ToString(sum);
        }

        private void minus_numbers_Click(object sender, EventArgs e)// -
        {
            
            if (int.TryParse(input1.Text, out number1) == false)
            {
                MessageBox.Show("숫자를 넣어주세요.");
                input1.Focus();
                return;

            }
            if (int.TryParse(input2.Text, out number2)==false )
            {
                MessageBox.Show("숫자를 넣어주세요.");
                input2.Focus();
                return;
            }
            number1 = Convert.ToInt32(input1.Text);
            number2 = Convert.ToInt32(input2.Text);
            
            int minus = number1 - number2;
            resultbox.Text = Convert.ToString(minus);
        }

        private void x_numbers_Click(object sender, EventArgs e) // *
        {
            
            if (int.TryParse(input1.Text, out number1) == false)
            {
                MessageBox.Show("숫자를 넣어주세요.");
                input1.Focus();
                return;

            }
            if (int.TryParse(input2.Text, out number2) == false)
            {
                MessageBox.Show("숫자를 넣어주세요.");
                input2.Focus();
                return;
            }
            number1 = Convert.ToInt32(input1.Text);
            number2 = Convert.ToInt32(input2.Text);
            
            int multi = number1 * number2;
            resultbox.Text = Convert.ToString(multi);
        }

        private void div_numbers_Click(object sender, EventArgs e)// /
        {
            
            if (int.TryParse(input1.Text, out number1) == false)
            {
                MessageBox.Show("숫자를 넣어주세요.");
                input1.Focus();
                return;

            }
            if (int.TryParse(input2.Text, out number2) == false)
            {
                MessageBox.Show("숫자를 넣어주세요.");
                input2.Focus();
                return;
            }
            number1 = Convert.ToInt32(input1.Text);
            number2 = Convert.ToInt32(input2.Text);
            
            int div = number1 / number2;
            resultbox.Text = Convert.ToString(div);
        }

        private void Calc_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            
            if (int.TryParse(input1.Text, out number1) == false)
            {
                MessageBox.Show("숫자를 넣어주세요.");
                input1.Focus();
                return;

            }
            if (int.TryParse(input2.Text, out number2) == false)
            {
                MessageBox.Show("숫자를 넣어주세요.");
                input2.Focus();
                return;
            }
            number1 = Convert.ToInt32(input1.Text);
            number2 = Convert.ToInt32(input2.Text);

            int div = number1 % number2;
            resultbox.Text = Convert.ToString(div);
        }
    }

늘 그렇듯 주석에 다 적어뒀지만

이 프로젝트의 경우 숫자만 받는것이 목적이기에 올 수 있는 경우의 수가 몇개 없다.

1 공백만 입력하거나

2 문자를 입력하거나

숫자를 입력하거나 -> 이거만 통과

 

1번 케이스의 경우 input1.Text == " " 

이렇게 입력한 경우에만 에러 메세지를 출력하도록

MessageBox.Show("필요한말 입력") 해서 띄워준다.

또는

String.IsNullOrWhiteSpace(input1.Text)함수를 이용할것이다. 이름만 봐도 알겠지만 공백인가요? 하는 함수이다. 불 형식으로 0과 1만 나오고 숫자면 상관이 없으나 숫자가 아니게 되면 1이 나오게 된다.

 

2번케이스의 경우에는 

TryParse를 활용할것이다.

int.TryParse(string s, out int result)
이 함수는 바꿀 문자열 이 먼저 들어간다.
두번째 int에는 out이 붙어있는데. 이러면 매개변수로 그 int값을 넣어본다는 뜻이다. 
첫번째 인자로 들어간 문자열을 숫자로 바꿔서 그 값을 두번째 인자로 넣는다. 
tryparse인자가 true이면 그 값을 두번째 인자로 넘긴다.
false이면 숫자로 바꾸는게 실패했다는 뜻이고 두번째인자엔 변화가 없음.
if (int.TryParse(input2.Text, out number2) == false)
                {

                MessageBox.Show("숫자를 넣어주세요.");
                input2.Focus();
                return;
                //이 이벤트 탈출
                //int형이면 return0;

            }

이렇게 해주면 값이 true일때만 바뀌게 되는데. number2를 위에서 0으로 초기화를 해주었기에

숫자면 그냥 그 값으로 무사히 바뀌고.

숫자가 아니게 되면 TryParse를 통과를 못하게 되고, number2는 그대로 0일꺼고. if문 내부로 돌면서 메시지 출력과 함께 focus될것이다. 커서가 그 텍스트박스로 갈것이다.

이제 좀 그럴듯해지고있는것같다. 오늘은 여기까지.

반응형

'코오딩 > _C#' 카테고리의 다른 글

C# 계산기 내 나름 최종본 (코드포함)  (0) 2021.02.25
C# 계산기시도하기 - 3  (0) 2021.02.25
C# 계산기 시도하기 - 1  (0) 2021.02.21
C# 기초 / Hello, world 뜯기  (0) 2021.02.19