<Window x:Class="_037_Calculator.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:_037_Calculator"
mc:Ignorable="d"
Title="윈도우계산기" Height="650" Width="400"
Background="WhiteSmoke" MinHeight="500" MinWidth="300">
<DockPanel Margin="5">
<!--수식창과 계산결과-->
<Grid DockPanel.Dock="Top" Height="100">
<TextBox x:Name="txtExp" HorizontalContentAlignment="Right"
FontSize="20"
Background="WhiteSmoke"
BorderThickness="0"></TextBox>
<TextBox x:Name="txtResult" HorizontalContentAlignment="Right"
VerticalAlignment="Bottom"
FontSize="40"
FontWeight="Bold"
Margin="15"
Background="WhiteSmoke"
BorderThickness="0"></TextBox>
</Grid>
<!--메모리버튼-->
<Grid DockPanel.Dock="Top" Height="60">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button x:Name="btnMC"
Click="btnMC_Click"
Grid.Column="0"
Background="WhiteSmoke"
BorderThickness="0"
FontSize="20"
FontWeight="Bold" HorizontalAlignment="Left" Width="78">MC</Button>
<Button x:Name="btnMR"
Click="btnMR_Click"
Grid.Column="1"
Background="WhiteSmoke"
BorderThickness="0"
FontSize="20"
FontWeight="Bold">MR</Button>
<Button x:Name="btnMPlus"
Click="btnMPlus_Click"
Grid.Column="2"
Background="WhiteSmoke"
BorderThickness="0"
FontSize="20"
FontWeight="Bold">M+</Button>
<Button x:Name="btnMMinus"
Click="btnMMinus_Click"
Grid.Column="3"
Background="WhiteSmoke"
BorderThickness="0"
FontSize="20"
FontWeight="Bold" >M-</Button>
<Button x:Name="btnMS"
Click="btnMS_Click"
Grid.Column="4"
Background="WhiteSmoke"
BorderThickness="0"
FontSize="20"
FontWeight="Bold">MS</Button>
</Grid>
<!--숫자및 연산자-->
<Grid Background="Black">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button x:Name="btnPercent"
Click="btnPercent_Click"
Grid.Column="0" Grid.Row="0"
Margin="1" FontSize="20"
BorderThickness="0">%</Button>
<Button x:Name="btnSqrt"
Click="btnSqrt_Click"
Grid.Column="1" Grid.Row="0"
Margin="1" FontSize="20"
BorderThickness="0">√</Button>
<Button x:Name="btnSqr"
Click="btnSqr_Click"
Grid.Column="2" Grid.Row="0"
Margin="1" FontSize="20"
BorderThickness="0">x²</Button>
<Button x:Name="btnRecip"
Click="btnRecip_Click"
Grid.Column="3" Grid.Row="0"
Margin="1" FontSize="20"
BorderThickness="0">1/x</Button>
<Button x:Name="btnCE"
Click="btnCE_Click"
Grid.Column="0" Grid.Row="1"
Margin="1" FontSize="20"
BorderThickness="0">CE</Button>
<Button x:Name="btnC"
Click="btnC_Click"
Grid.Column="1" Grid.Row="1"
Margin="1" FontSize="20"
BorderThickness="0">C</Button>
<Button x:Name="btnDelete"
Click="btnDelete_Click"
Grid.Column="2" Grid.Row="1"
Margin="1" FontSize="20"
BorderThickness="0">Del</Button>
<Button x:Name="btnDivide"
Click="op_Click"
Grid.Column="3" Grid.Row="1"
Margin="1" FontSize="20"
BorderThickness="0">÷</Button>
<Button x:Name="btn7"
Click="btn_Click"
Grid.Column="0" Grid.Row="2"
Margin="1" FontSize="24"
BorderThickness="0"
FontWeight="Bold"
Background="WhiteSmoke">7</Button>
<Button x:Name="btn8"
Click="btn_Click"
Grid.Column="1" Grid.Row="2"
Margin="1" FontSize="24"
BorderThickness="0"
FontWeight="Bold"
Background="WhiteSmoke">8</Button>
<Button x:Name="btn9"
Click="btn_Click"
Grid.Column="2" Grid.Row="2"
Margin="1" FontSize="24"
BorderThickness="0"
FontWeight="Bold"
Background="WhiteSmoke">9</Button>
<Button x:Name="btnx"
Click="op_Click"
Grid.Column="3" Grid.Row="2"
Margin="1" FontSize="24"
BorderThickness="0"
>x</Button>
<Button x:Name="btn4"
Click="btn_Click"
Grid.Column="0" Grid.Row="3"
Margin="1" FontSize="24"
BorderThickness="0"
FontWeight="Bold"
Background="WhiteSmoke">4</Button>
<Button x:Name="btn5"
Click="btn_Click"
Grid.Column="1" Grid.Row="3"
Margin="1" FontSize="24"
BorderThickness="0"
FontWeight="Bold"
Background="WhiteSmoke">5</Button>
<Button x:Name="btn6"
Click="btn_Click"
Grid.Column="2" Grid.Row="3"
Margin="1" FontSize="24"
BorderThickness="0"
FontWeight="Bold"
Background="WhiteSmoke">6</Button>
<Button x:Name="btnMiuns"
Click="op_Click"
Grid.Column="3" Grid.Row="3"
Margin="1" FontSize="20"
BorderThickness="0">-</Button>
<Button x:Name="btn1"
Click="btn_Click"
Grid.Column="0" Grid.Row="4"
Margin="1" FontSize="24"
BorderThickness="0"
FontWeight="Bold"
Background="WhiteSmoke">1</Button>
<Button x:Name="btn2"
Click="btn_Click"
Grid.Column="1" Grid.Row="4"
Margin="1" FontSize="24"
BorderThickness="0"
FontWeight="Bold"
Background="WhiteSmoke">2</Button>
<Button x:Name="btn3"
Click="btn_Click"
Grid.Column="2" Grid.Row="4"
Margin="1" FontSize="24"
BorderThickness="0"
FontWeight="Bold"
Background="WhiteSmoke">3</Button>
<Button x:Name="btnPlus"
Click="op_Click"
Grid.Column="3" Grid.Row="4"
Margin="1" FontSize="20"
BorderThickness="0" HorizontalAlignment="Left" Width="95">+</Button>
<Button x:Name="btnPM"
Click="btnPM_Click"
Grid.Column="0" Grid.Row="5"
Margin="1" FontSize="20"
BorderThickness="0">±</Button>
<Button x:Name="btn0"
Click="btn_Click"
Grid.Column="1" Grid.Row="5"
Margin="1" FontSize="24"
BorderThickness="0"
FontWeight="Bold"
Background="WhiteSmoke">0</Button>
<Button x:Name="btnDot"
Click="btnDot_Click"
Grid.Column="2" Grid.Row="5"
Margin="1,1,0,1" FontSize="20"
BorderThickness="0" HorizontalAlignment="Left" Width="96"
>.</Button>
<Button x:Name="btnEqul"
Click="btnEqul_Click"
Grid.Column="3" Grid.Row="5"
Margin="1" FontSize="20"
BorderThickness="0">=</Button>
</Grid>
</DockPanel>
</Window>
큰 틀로써 설명하자면 Grid.RowDefinitions와 Grid.ColumnDefinitions로 계산기의 틀을 만들어주고
각각의 버튼에 이벤트와 이름을 지정해준다.
public partial class MainWindow : Window
{
private bool opFlag;
private bool memFlag;
private double saved;
private string op;
private bool afterCalc;
private double memory;
public MainWindow()
{
InitializeComponent();
btnMC.IsEnabled = false;
btnMR.IsEnabled = false;
}
private void btnMC_Click(object sender, RoutedEventArgs e)
{
txtResult.Text = "0";
memory = 0;
btnMR.IsEnabled=false;
btnMC.IsEnabled=false;
}
private void btnDot_Click(object sender, RoutedEventArgs e)
{
if (txtResult.Text.Contains("."))
return;
else
txtResult.Text += ".";
}
private void btn_Click(object sender, RoutedEventArgs e)
{
Button btn = (Button)sender;
string s = btn.Content.ToString();
txtExp.Text = "";
//출력창이 0이거나 연산자 버튼이 눌린 후, 메모리 버튼이 눌리거나, afterCalc가 눌리거나
if (txtResult.Text == "0" || opFlag == true || memFlag == true||afterCalc == true) //aftercalc : 결과 버튼 누른후 새로운 계산위해서 s로 바꿈
{
if (afterCalc == true)
txtExp.Text = "";
txtResult.Text = s; //s로 바꾸기
afterCalc = false;
opFlag = false;
memFlag = false;
}
else
txtResult.Text += s; //s뒤에 붙이기
}
//사칙연산자 클릭
private void op_Click(object sender, RoutedEventArgs e)
{
Button btn = (Button)sender;
saved = double.Parse(txtResult.Text);
txtExp.Text = txtResult.Text + btn.Content.ToString();
op = btn.Content.ToString();
opFlag = true;
}
private void btnEqul_Click(object sender, RoutedEventArgs e)
{
double v = double.Parse(txtResult.Text);
txtExp.Text += txtExp.Text + "=";
switch (op)
{
case "+":
txtResult.Text = (saved + v).ToString();
break;
case "-":
txtResult.Text = (saved - v).ToString();
break;
case "x":
txtResult.Text = (saved * v).ToString();
break;
case "%":
txtResult.Text = (saved / v).ToString();
break;
}
afterCalc = false;
}
private void btnPM_Click(object sender, RoutedEventArgs e)
{
txtResult.Text = ((-1) * double.Parse(txtResult.Text)).ToString();
}
private void btnPercent_Click(object sender, RoutedEventArgs e)
{
double p = Double.Parse(txtResult.Text);
p = saved * p / 100;
txtResult.Text = p.ToString();
//txtExp.Text += txtResult.Text;
}
private void btnSqrt_Click(object sender, RoutedEventArgs e)
{
if (txtExp.Text == "")
txtExp.Text = "√(" + txtResult.Text + ")";
else
txtExp.Text = "√(" + txtExp.Text + ")";
txtResult.Text=Math.Sqrt(double.Parse(txtResult.Text)).ToString();
}
private void btnSqr_Click(object sender, RoutedEventArgs e)
{
if (txtExp.Text == "")
txtExp.Text = "sqr(" + txtResult.Text + ")";
else
txtExp.Text = "sqr(" + txtExp.Text + ")";
double v = double.Parse(txtResult.Text);
txtResult.Text = (v * v).ToString();
}
private void btnRecip_Click(object sender, RoutedEventArgs e)
{
if (txtExp.Text == "")
txtExp.Text = "1/(" + txtResult.Text + ")";
else
txtExp.Text = "1/(" + txtExp.Text + ")";
double v = double.Parse(txtResult.Text);
txtResult.Text = (1/v).ToString();
}
private void btnCE_Click(object sender, RoutedEventArgs e)
{
txtResult.Text = "0";
}
private void btnC_Click(object sender, RoutedEventArgs e)
{
txtResult.Text = "0";
txtExp.Text = "";
saved = 0;
op = "";
opFlag = false;
}
private void btnDelete_Click(object sender, RoutedEventArgs e)
{
txtResult.Text = txtResult.Text.Remove(txtResult.Text.Length - 1);
if (txtResult.Text.Length == 0)
txtResult.Text = "0";
}
private void btnMS_Click(object sender, RoutedEventArgs e)
{
memory = double.Parse(txtResult.Text);
btnMC.IsEnabled = true;
btnMR.IsEnabled = true;
memFlag = true;
}
private void btnMR_Click(object sender, RoutedEventArgs e)
{
txtResult.Text = memory.ToString();
memFlag = true;
}
private void btnMPlus_Click(object sender, RoutedEventArgs e)
{
memory += double.Parse(txtResult.Text);
}
private void btnMMinus_Click(object sender, RoutedEventArgs e)
{
memory -= double.Parse(txtResult.Text);
}
}
'C#' 카테고리의 다른 글
039_PhoneBook(Access DB예제) (0) | 2022.05.20 |
---|---|
038_ListArray (0) | 2022.05.11 |
035_036_ChessBoard (0) | 2022.04.13 |
034_UserControl (0) | 2022.04.13 |
033_StackPanel (0) | 2022.04.12 |