Загрузил ll46

Kalkulyator (2)

реклама
Итак, откроем Visual Studio и в меню File (Файл) выберем пункт New
(Создать) -> Project... (Проект...). Перед нами откроется диалоговое окно
создания проекта, в котором мы выберем шаблон WPF Application:
Укажем проекту какое-нибудь имя и нажмем кнопку OK. И Visual Studio
создаст нам новый проект
По умолчанию студия открывает создает и открывает нам два файла: файл
декларативной разметки интерфейса MainWindow.xaml и файл связанного с
разметкой кода MainWindow.xaml.cs. Файл MainWindow.xaml имеет два
представления: визуальное - в режиме WYSIWIG отображает весь
графический интерфейс данного окна приложения, и под ним декларативное
объявление интерфейса в XAML. Если мы изменим декларативную разметку,
например, определим там кнопку, то эти изменения отображаться в
визуальном представлении.
Структура проекта
В структуре проекта WPF следует выделить следующие моменты. Во-первых,
в проекте имеется файл App.xaml и связанный с ним файл кодаApp.xaml.cs это глобальные файлы для всего приложения, позже мы о них поговорим
подробнее. А пока только следует знать, что App.xaml задает файл окна
программы, которое будет открываться при запуске приложения. Если вы
откроете
этот
файл,
то
можете
найти
в
нем
строку StartupUri="MainWindow.xaml" - то есть в данном случае, когда мы
запустим приложение, будет создаваться интерфейс из файла
MainWindow.xaml.
Далее в структуре определены файл разметки MainWindow.xaml и файл
связанного кода MainWindow.xaml.cs. Файл MainWindow.xaml и представляет
определение окна приложение, которое мы увидим при запуске.
Создание калькулятора
Теперь создадим первое приложение. Перейдем к файлу MainWindow.xaml.
Сейчас его разметка XAML, созданная по умолчанию, представляет
следующее:
1 <Window x:Class="FirstWpfApp.MainWindow"
2
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6
xmlns:local="clr-namespace:FirstWpfApp"
7
mc:Ignorable="d"
8
Title="MainWindow" Height="350" Width="525">
9
<Grid>
10
11
</Grid>
12 </Window>
XAML в целом напоминает язык разметки HTML: здесь у нас сначала
определен элемент верхнего уровня Window - окно приложения, в нем
определено элемент Grid - контейнер верхнего уровня, в который мы можем
добавлять другие элементы. Каждый элемент может иметь определенные
атрибуты. Более подробно с языком XAML и элементами мы познакомимся
позднее, а пока изменим эту разметку на следующую:
1 <Window x:Class="FirstWpfApp.MainWindow"
2
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4
Title="Калькулятор" Height="250" Width="300">
5
<Grid x:Name="LayoutRoot" Background="White">
6
<Grid.RowDefinitions>
7
<RowDefinition />
8
<RowDefinition />
9
<RowDefinition />
10
<RowDefinition />
11
<RowDefinition />
12
</Grid.RowDefinitions>
13
<Grid.ColumnDefinitions>
14
<ColumnDefinition />
15
<ColumnDefinition />
16
<ColumnDefinition />
17
<ColumnDefinition />
18
</Grid.ColumnDefinitions>
19
<TextBlock x:Name="textBlock" Grid.Column="0" Grid.ColumnSpan="4" />
20
<Button Grid.Column="0" Grid.Row="1">1</Button>
21
<Button Grid.Column="1" Grid.Row="1">2</Button>
22
<Button Grid.Column="2" Grid.Row="1">3</Button>
23
<Button Grid.Column="3" Grid.Row="1">4</Button>
24
<Button Grid.Column="0" Grid.Row="2">5</Button>
25
<Button Grid.Column="1" Grid.Row="2">6</Button>
26
<Button Grid.Column="2" Grid.Row="2">7</Button>
27
<Button Grid.Column="3" Grid.Row="2">8</Button>
28
<Button Grid.Column="0" Grid.Row="3">9</Button>
29
<Button Grid.Column="1" Grid.Row="3">0</Button>
30
<Button Grid.Column="2" Grid.Row="3">+</Button>
31
<Button Grid.Column="3" Grid.Row="3">-</Button>
32
<Button Grid.Column="0" Grid.Row="4">*</Button>
33
<Button Grid.Column="1" Grid.Row="4">/</Button>
34
<Button Grid.Column="2" Grid.Row="4">=</Button>
35
<Button Grid.Column="3" Grid.Row="4">CLEAR</Button>
36
</Grid>
37 </Window>
Здесь мы задали массив кнопок как в обычном калькуляторе. После
изменения разметки, визуальное представление интерфейса также изменится,
и вы сможете там разглядеть подобие калькулятора. Теперь откроем файл
логики, привязанной к данной разметке, MainWindow.xaml.cs. Сейчас он
имеет следующий код:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6 using System.Windows;
7 using System.Windows.Controls;
8 using System.Windows.Data;
9 using System.Windows.Documents;
10 using System.Windows.Input;
11 using System.Windows.Media;
12 using System.Windows.Media.Imaging;
13 using System.Windows.Navigation;
14 using System.Windows.Shapes;
15
16 namespace FirstWpfApp
17 {
18
public partial class MainWindow : Window
19
{
20
public MainWindow()
21
{
22
InitializeComponent();
23
}
24
}
25 }
И изменим его на следующий:
1
using System;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System.Windows;
using System.Windows.Controls;
namespace FirstWpfApp
{
public partial class MainWindow : Window
{
string leftop = ""; // Левый операнд
string operation = ""; // Знак операции
string rightop = ""; // Правый операнд
public MainWindow()
{
InitializeComponent();
// Добавляем обработчик для всех кнопок на гриде
foreach (UIElement c in LayoutRoot.Children)
{
if (c is Button)
{
((Button)c).Click += Button_Click;
}
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
// Получаем текст кнопки
string s = (string)((Button)e.OriginalSource).Content;
// Добавляем его в текстовое поле
textBlock.Text += s;
int num;
// Пытаемся преобразовать его в число
bool result = Int32.TryParse(s, out num);
// Если текст - это число
if (result == true)
{
// Если операция не задана
if (operation == "")
{
// Добавляем к левому операнду
leftop += s;
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
}
else
{
// Иначе к правому операнду
rightop += s;
}
}
// Если было введено не число
else
{
// Если равно, то выводим результат операции
if (s == "=")
{
Update_RightOp();
textBlock.Text += rightop;
operation = "";
}
// Очищаем поле и переменные
else if (s == "CLEAR")
{
leftop = "";
rightop = "";
operation = "";
textBlock.Text = "";
}
// Получаем операцию
else
{
// Если правый операнд уже имеется, то присваиваем его значение ле
// операнду, а правый операнд очищаем
if (rightop != "")
{
Update_RightOp();
leftop = rightop;
rightop = "";
}
operation = s;
}
}
}
82
// Обновляем значение правого операнда
83
private void Update_RightOp()
84
{
85
int num1 = Int32.Parse(leftop);
86
int num2 = Int32.Parse(rightop);
87
// И выполняем операцию
88
switch (operation)
89
{
90
case "+":
91
rightop = (num1 + num2).ToString();
92
break;
93
case "-":
94
rightop = (num1 - num2).ToString();
95
break;
96
case "*":
97
rightop = (num1 * num2).ToString();
98
break;
99
case "/":
100
rightop = (num1 / num2).ToString();
101
break;
102
}
103
}
104
}
105 }
Итак, первое приложение - калькулятор готов.
Скачать