오늘 이모양으로 만들었다.
이제 좀 그래도 그럴듯해보이지않은가.
먼저 저번시간에 한 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 |