Загрузка данных
<Window x:Class="CalculatorApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Калькулятор" Height="380" Width="300" ResizeMode="NoResize">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="60"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="Display" Grid.ColumnSpan="4" FontSize="24" TextAlignment="Right" IsReadOnly="True" VerticalContentAlignment="Center" Margin="0,0,0,10" Text=""/>
<!-- Ряд 1 -->
<Button Grid.Row="1" Grid.Column="0" Content="C" Click="Clear_Click" Margin="2"/>
<Button Grid.Row="1" Grid.Column="1" Content="±" Click="Negate_Click" Margin="2"/>
<Button Grid.Row="1" Grid.Column="2" Content="^" Click="Operator_Click" Margin="2"/>
<Button Grid.Row="1" Grid.Column="3" Content="/" Click="Operator_Click" Margin="2"/>
<!-- Ряд 2 -->
<Button Grid.Row="2" Grid.Column="0" Content="7" Click="Number_Click" Margin="2"/>
<Button Grid.Row="2" Grid.Column="1" Content="8" Click="Number_Click" Margin="2"/>
<Button Grid.Row="2" Grid.Column="2" Content="9" Click="Number_Click" Margin="2"/>
<Button Grid.Row="2" Grid.Column="3" Content="*" Click="Operator_Click" Margin="2"/>
<!-- Ряд 3 -->
<Button Grid.Row="3" Grid.Column="0" Content="4" Click="Number_Click" Margin="2"/>
<Button Grid.Row="3" Grid.Column="1" Content="5" Click="Number_Click" Margin="2"/>
<Button Grid.Row="3" Grid.Column="2" Content="6" Click="Number_Click" Margin="2"/>
<Button Grid.Row="3" Grid.Column="3" Content="-" Click="Operator_Click" Margin="2"/>
<!-- Ряд 4 -->
<Button Grid.Row="4" Grid.Column="0" Content="1" Click="Number_Click" Margin="2"/>
<Button Grid.Row="4" Grid.Column="1" Content="2" Click="Number_Click" Margin="2"/>
<Button Grid.Row="4" Grid.Column="2" Content="3" Click="Number_Click" Margin="2"/>
<Button Grid.Row="4" Grid.Column="3" Content="+" Click="Operator_Click" Margin="2"/>
<!-- Ряд 5 -->
<Button Grid.Row="5" Grid.Column="0" Grid.ColumnSpan="2" Content="0" Click="Number_Click" Margin="2"/>
<Button Grid.Row="5" Grid.Column="2" Content="," Click="Decimal_Click" Margin="2"/>
<Button Grid.Row="5" Grid.Column="3" Content="=" Click="Equals_Click" Margin="2"/>
</Grid>
</Window>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace CalculatorApp
{
public partial class MainWindow : Window
{
private double _firstNumber = 0;
private string _operation = "";
private string _currentInput = "";
private bool _isResultShown = false;
public MainWindow()
{
InitializeComponent();
Display.Text = "";
}
private void Number_Click(object sender, RoutedEventArgs e)
{
Button button = (Button)sender;
if (_isResultShown)
{
_currentInput = "";
_isResultShown = false;
Display.Background = Brushes.White;
}
_currentInput += button.Content.ToString();
UpdateDisplay();
}
private void Decimal_Click(object sender, RoutedEventArgs e)
{
if (_isResultShown)
{
_currentInput = "0";
_isResultShown = false;
Display.Background = Brushes.White;
}
if (!_currentInput.Contains(","))
{
if (string.IsNullOrEmpty(_currentInput))
_currentInput = "0";
_currentInput += ",";
}
UpdateDisplay();
}
private void Negate_Click(object sender, RoutedEventArgs e)
{
if (_isResultShown)
{
_isResultShown = false;
Display.Background = Brushes.White;
}
if (!string.IsNullOrEmpty(_currentInput) && double.TryParse(_currentInput, out double current))
{
current = -current;
_currentInput = current.ToString();
UpdateDisplay();
}
}
private void Operator_Click(object sender, RoutedEventArgs e)
{
Button button = (Button)sender;
if (_isResultShown)
{
_isResultShown = false;
Display.Background = Brushes.White;
}
if (!string.IsNullOrEmpty(_currentInput))
{
if (double.TryParse(_currentInput, out double result))
{
if (string.IsNullOrEmpty(_operation))
{
_firstNumber = result;
}
else
{
_firstNumber = Calculate(_firstNumber, result, _operation);
}
}
_currentInput = "";
}
_operation = button.Content.ToString();
UpdateDisplay();
}
private void Equals_Click(object sender, RoutedEventArgs e)
{
if (!string.IsNullOrEmpty(_operation) && !string.IsNullOrEmpty(_currentInput))
{
if (double.TryParse(_currentInput, out double secondNumber))
{
double result = Calculate(_firstNumber, secondNumber, _operation);
Display.Text = result.ToString();
_firstNumber = result;
_currentInput = result.ToString();
_operation = "";
_isResultShown = true;
if (result > 0)
{
Display.Background = Brushes.LightGreen;
}
else if (result < 0)
{
Display.Background = Brushes.LightCoral;
}
else
{
Display.Background = Brushes.White;
}
}
}
}
private double Calculate(double a, double b, string op)
{
switch (op)
{
case "+": return a + b;
case "-": return a - b;
case "*": return a * b;
case "/":
if (b == 0)
{
MessageBox.Show("Ошибка: деление на ноль.");
return a;
}
return a / b;
case "^": return Math.Pow(a, b);
default: return b;
}
}
private void UpdateDisplay()
{
if (string.IsNullOrEmpty(_operation))
{
Display.Text = _currentInput;
}
else
{
Display.Text = $"{_firstNumber} {_operation} {_currentInput}";
}
}
private void Clear_Click(object sender, RoutedEventArgs e)
{
_currentInput = "";
_firstNumber = 0;
_operation = "";
_isResultShown = false;
Display.Background = Brushes.White;
Display.Text = "";
}
}
}