[C#] 22일차 - 160. WPF 간단한 계산기C#/C#200제2021. 3. 5. 19:17
Table of Contents
<Window x:Class="A160_WPF_SimpleCalc.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:A160_WPF_SimpleCalc"
mc:Ignorable="d"
Title="간단한 계산기" Height="380" Width="320">
<StackPanel Margin="10">
<TextBox Margin="5" Height="60" Name="txtResult" FontSize="30" HorizontalContentAlignment="Right" VerticalContentAlignment="Bottom">0</TextBox>
<Grid Height="260">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Grid.Column="0" Margin="5" FontSize="16" Click="btn_Click">7</Button>
<Button Grid.Row="0" Grid.Column="1" Margin="5" FontSize="16" Click="btn_Click">8</Button>
<Button Grid.Row="0" Grid.Column="2" Margin="5" FontSize="16" Click="btn_Click">9</Button>
<Button Grid.Row="0" Grid.Column="3" Margin="5" FontSize="16" Click="btnOp_Click">+</Button>
<Button Grid.Row="1" Grid.Column="0" Margin="5" FontSize="16" Click="btn_Click">4</Button>
<Button Grid.Row="1" Grid.Column="1" Margin="5" FontSize="16" Click="btn_Click">5</Button>
<Button Grid.Row="1" Grid.Column="2" Margin="5" FontSize="16" Click="btn_Click">6</Button>
<Button Grid.Row="1" Grid.Column="3" Margin="5" FontSize="16" Click="btnOp_Click">-</Button>
<Button Grid.Row="2" Grid.Column="0" Margin="5" FontSize="16" Click="btn_Click">1</Button>
<Button Grid.Row="2" Grid.Column="1" Margin="5" FontSize="16" Click="btn_Click">2</Button>
<Button Grid.Row="2" Grid.Column="2" Margin="5" FontSize="16" Click="btn_Click">3</Button>
<Button Grid.Row="2" Grid.Column="3" Margin="5" FontSize="16" Click="btnOp_Click">x</Button>
<Button Grid.Row="3" Grid.Column="0" Margin="5" FontSize="16" Click="Dot_Click">.</Button>
<Button Grid.Row="3" Grid.Column="1" Margin="5" FontSize="16" Click="btn_Click">0</Button>
<Button Grid.Row="3" Grid.Column="2" Margin="5" FontSize="16" Click="Equal_Click">=</Button>
<Button Grid.Row="3" Grid.Column="3" Margin="5" FontSize="16" Click="btnOp_Click">/</Button>
</Grid>
</StackPanel>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace A160_WPF_SimpleCalc
{
/// <summary>
/// MainWindow.xaml에 대한 상호 작용 논리
/// </summary>
public partial class MainWindow : Window
{
private bool newButton; // 연산자 버튼을 누른 후 새로 숫자가 시작되어야 함을 의미
private double savedValue; // 연산자 버튼을 누를 때 현재 txtResult에 있는 값을 저장하는 필드
private char myOperator; // 현재 계산할 연산자를 저장하는 char형 변수
public MainWindow()
{
InitializeComponent();
}
// 숫자 버튼의 처리
private void btn_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
string number = btn.Content.ToString();
// 지금 0이거나 새로시작했을경우 값을 바로 적어줌.
if(txtResult.Text=="0" || newButton == true)
{
txtResult.Text = number;
newButton = false;
} else // 그렇지 않을경우 숫자를 뒤에 계속 붙임 -> char기때문에 가능
{
txtResult.Text = txtResult.Text + number;
}
}
// 연산자 처리
private void btnOp_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
savedValue = double.Parse(txtResult.Text); // 원래 있던 값을 savedValue에 저장
myOperator = btn.Content.ToString()[0]; // 연산자를 저장
newButton = true; // 계산 완료시 새로시작
}
// 소수점의 처리
private void Dot_Click(object sender, RoutedEventArgs e)
{
if (txtResult.Text.Contains(".") == false)
txtResult.Text += ".";
}
// = 버튼의 처리
private void Equal_Click(object sender, RoutedEventArgs e)
{
if (myOperator == '+')
txtResult.Text = (savedValue + double.Parse(txtResult.Text)).ToString();
else if (myOperator == '-')
txtResult.Text = (savedValue - double.Parse(txtResult.Text)).ToString();
else if (myOperator == '*')
txtResult.Text = (savedValue * double.Parse(txtResult.Text)).ToString();
else if (myOperator == '/')
txtResult.Text = (savedValue / double.Parse(txtResult.Text)).ToString();
}
}
}
반응형
'C# > C#200제' 카테고리의 다른 글
[C#] 22일차 - 163. WPF 윈도우 표준 계산기의 디자인 (0) | 2021.03.06 |
---|---|
[C#] 22일차 - 161. WinForm 윈도우 표준 계산기 (0) | 2021.03.05 |
[C#] 21일차 - 159. WPF DispatcherTimer와 깜박이는 프로그램 (0) | 2021.03.01 |
[C#] 21일차 - 157. WPF의 레이아웃 (0) | 2021.03.01 |
[C#] 21일차 - 156. WPF로 Hello World 프로그램 만들기 (0) | 2021.03.01 |
@반나무 :: 반나무_뿌리
3년차 WPF 개발자입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!