설명 : 기본적인 사칙 연산을 구현 폼에서 table layout panel을 붙여서 행과 열을 추가 해줄 때 비율을 맞춰서 추가해주고 그 안에 버튼과 텍스트 상자 2개를 넣어주었습니다. 이때 버튼을 fill로 도킹해서 사용자가 쓸 때 크기를 조절하더라도 원하는 크기에 맞춰서 비율이 맞춰지도록 하였습니다. 버튼이나 텍스트 박스가 마우스로 클릭할 때 컨트롤 모양을 바꾸어주었습니다. 계산기에서 숫자를 입력할 때 키보드로 입력하지 않고 마우스로 입력할 수 있도록 텍스트 박스를 읽기전용으로 지정해주었습니다. 텍스트 박스를 2개로 해서 텍스트박스1에는 쓰고 있는 숫자와 출력된 숫자가 보이고 텍스트박스2에는 계산하고 있는 숫자가 보이도록 했습니다. 계산기의는 크리스마스 분위기가 나도록 디자인 하고 버튼 컨트롤에 표시될 이미지와 폼의 아이콘을 추가시켜주어서 변경해주었습니다. |
변수설명 : public static DataTable table = new DataTable(); 문자열을 계산 수식하기 위한 메서드를 쓰기 위해서 인스턴트를 생성해줍니다. Button button; 버튼을 컨트롤 하기 위해서 (버튼 텍스트를 쓰기 위해서) 선언해줍니다. DialogResult dr = MessageBox.Show("수식이잘못되었습니다.", "다시입력해주세요."); 메시지 대화상자를 반환하기 위해서 선언해줍니다. |
메소드 설명 : private void buttonDot_Click(object sender, EventArgs e) 폼에서 . 버튼을 클릭할 때 호출되는 메서드입니다. 입력 된 숫자가 있으면 소수점을 추가하고 입력된 숫자가 없으면 0.을 추가해줍니다. private void buttonNum_Click(object sender, EventArgs e) 버튼 0~9를 눌렀을 때 호출되는 메서드입니다. 누른 버튼의 텍스트를 텍스트 박스에 추가해줍니다. private void buttonEquals_Click(object sender, EventArgs e) 버튼 =을 눌렀을 때 호출되는 메서드입니다. 텍스트 박스의 현재 입력된 숫자를 지정된 식으로(사칙연산) 계산을 해주고 문자열로 표현해줍니다. 식을 잘못 입력 했을 때를 위해 예외처리를 해줍니다. private void buttonC_Click(object sender, EventArgs e) 버튼 c를 눌렀을 때 호출되는 메서드입니다. (Clear) 텍스트박스1의 텍스트와 텍스트박스2의 텍스트가 모두 초기화됩니다. private void buttonback_Click(object sender, EventArgs e) 버튼 <을 눌렀을 때 호출되는 메서드입니다. (뒤로 가기 버튼) 텍스트박스1의 텍스트를 한 문자씩 지울 수 있도록 합니다. private void buttonLeft_Click(object sender, EventArgs e) 버튼 괄호‘(’를 눌렀을 때 호출되는 메서드입니다. ‘(’을 추가해줍니다. private void buttonRight_Click(object sender, EventArgs e) 버튼 괄호‘)’를 눌렀을 때 호출되는 메서드입니다. ‘)’을 추가해줍니다. private void buttonCal_Click(object sender, EventArgs e) 버튼 +,-,*,%을 눌렀을 때 호출되는 메서드입니다. 텍스트박스2의 텍스트에 텍스트박스1의 텍스트와 버튼의 텍스트를 넣어줍니다. 이 후 텍스트박스1의 텍스트는 지워집니다. table.Compute(textBox2.Text + textBox1.Text, "").ToString() 현재 행에서 지정된 식을 계산해서 문자열로 나타내는 메서드입니다. textBox1.Text.Substring(0,textBox1.Text.Length - 1); 텍스트박스1의 텍스트 길이를 1씩 줄이는 메서드입니다. 범위는 시작위치부터 시작해서 텍스트의 길이로 지정되어있습니다. MessageBox.Show("수식이잘못되었습니다.", "다시입력해주세요."); 사용자에게 지시를 포함하는 메시지를 표시하는 메서드입니다. textBox1.Text.Contains(".") 텍스트박스1의 텍스트에 ‘.’ 이라는 문자열이 발생는지 여부에 따라 true false를 반환해줍니다. |
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication12
{
public partial class Form1 : Form
{
public static DataTable table = new DataTable();
public Form1()
{
InitializeComponent();
}
//. 버튼 클릭 할 때
private void buttonDot_Click(object sender, EventArgs e)
{
Button button;
button = (Button)sender;
if (!textBox1.Text.Contains("."))
{
//텍스트의 길이가 0일때
if (textBox1.Text.Length == 0)
textBox1.Text += 0;
textBox1.Text += button.Text;
}
else if (textBox1.Text.Contains("."))
return;
else
{
textBox1.Text += button.Text;
}
}
//0~9 를 누르면
private void buttonNum_Click(object sender, EventArgs e)
{
Button button;
button = (Button)sender;
textBox1.Text += button.Text;
}
//= 누르면
private void buttonEquals_Click(object sender, EventArgs e)
{
try
{
textBox1.Text = table.Compute(textBox2.Text + textBox1.Text, "").ToString();
textBox2.Text = "";
}
catch(Exception p)
{
DialogResult dr = MessageBox.Show("수식이 잘못되었습니다.", "다시 입력해주세요.");
}
}
//버튼 c를 누르면 모두 초기화
private void buttonC_Click(object sender, EventArgs e)
{
//텍스트박스 텍스트를 빈 문자열로 만들어줍니다.
textBox1.Text = string.Empty;
textBox2.Text = string.Empty;
}
//< 버튼을 누르면
private void buttonback_Click(object sender, EventArgs e)
{
if (textBox1.Text == string.Empty)
return;
//텍스트의 길이를 -1 씩 (텍스트를 하나씩 지운다.)
else
{
textBox1.Text = textBox1.Text.Substring(0,textBox1.Text.Length - 1);
}
}
private void buttonLeft_Click(object sender, EventArgs e)
{
textBox1.Text += "(";
}
private void buttonRight_Click(object sender, EventArgs e)
{
textBox1.Text += ")";
}
//+,-,*,% 누르면
private void buttonCal_Click(object sender, EventArgs e)
{
Button button;
button = (Button)sender;
//텍스트가 비어있으면
if (textBox1.Text == string.Empty)
return;
textBox2.Text += textBox1.Text + button.Text;
textBox1.Text = "";
}
}
}