Загрузка данных


1. Создание нового окна (через Visual Studio)
Способ 1: Через контекстное меню
1.	В Обозревателе решений (Solution Explorer) кликните правой кнопкой мыши по названию вашего проекта
2.	Выберите Add → Window (WPF)
3.	Назовите окно, например: SecondWindow.xaml
4.	Нажмите Add
Способ 2: Вручную (нужно создать 2 файла)
•	SecondWindow.xaml — разметка окна
•	SecondWindow.xaml.cs — код (code-behind)

2. Структура созданного окна
SecondWindow.xaml:
<Window x:Class="YourProject.SecondWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Моё окно" Height="300" Width="400">
    <Grid>
        <!-- Здесь будет содержимое окна -->
    </Grid>
</Window>
SecondWindow.xaml.cs:
using System.Windows;

namespace YourProject
{
    public partial class SecondWindow : Window
    {
        public SecondWindow()
        {
            InitializeComponent();
        }
    }
}

3. Способы открытия окна
Способ 1: Обычное окно (не блокирует родительское)
SecondWindow secondWindow = new SecondWindow();
secondWindow.Show();
Способ 2: Модальное окно (блокирует родительское)
SecondWindow secondWindow = new SecondWindow();
secondWindow.ShowDialog();
Способ 3: Открытие с владельцем
SecondWindow secondWindow = new SecondWindow();
secondWindow.Owner = this;  // this — текущее окно
secondWindow.Show();
Способ 4: Передача данных через конструктор
// В SecondWindow.xaml.cs добавить конструктор:
public SecondWindow(string userName)
{
    InitializeComponent();
    Title = $"Привет, {userName}!";
}

// Вызов:
SecondWindow secondWindow = new SecondWindow("Алексей");
secondWindow.Show();

4. Закрытие окна

// Закрыть текущее окно
this.Close();

// Закрыть из кода
Close();
5. Передача данных между окнами
Способ A: Через публичное свойство
В главном окне (MainWindow.xaml.cs):
private void OpenButton_Click(object sender, RoutedEventArgs e)
{
    SecondWindow secondWindow = new SecondWindow();
    secondWindow.ReceivedData = textBoxInput.Text; // Передаём данные
    secondWindow.Show();
}
В дополнительном окне (SecondWindow.xaml.cs):
public string ReceivedData { get; set; }

public SecondWindow()
{
    InitializeComponent();
    Loaded += (s, e) => textBlockDisplay.Text = ReceivedData;
}
Способ B: Через конструктор
Открытие:
SecondWindow secondWindow = new SecondWindow(userName, userAge);
secondWindow.Show();
Приёмник:
public SecondWindow(string name, int age)
{
    InitializeComponent();
    titleLabel.Content = $"Имя: {name}, Возраст: {age}";
}

6. Полезные свойства окна
Свойство	Описание
WindowStartupLocation	Центрирование окна (CenterScreen, CenterOwner)
ResizeMode	Можно ли изменять размер (CanResize, NoResize, CanMinimize)
WindowState	Состояние (Normal, Maximized, Minimized)
Topmost	Поверх всех окон (true/false)
ShowInTaskbar	Показывать в панели задач
Icon	Иконка окна

 ЗАДАНИЯ 

Задание 1: Окно-приветствие
Тема: Открытие окна по кнопке, передача текста из TextBox.
Техническое задание:
Главное окно:
•	Поле TextBox для ввода имени
•	Кнопка "Открыть приветствие"
•	При нажатии открывается дополнительное окно, куда передаётся введённое имя
Дополнительное окно:
•	Заголовок окна: "Приветствие"
•	Текст: "Привет, [имя]!"
•	Кнопка "Закрыть" — закрывает окно
•	Кнопка "Спасибо" — закрывает окно с сообщением "Вы нажали 'Спасибо'!"

Задание 2: Окно-калькулятор
Тема: Передача данных туда и обратно, модальное окно (ShowDialog).
Техническое задание:
Главное окно:
•	Два поля TextBox для ввода чисел
•	Кнопка "Открыть калькулятор"
•	После закрытия калькулятора отображается результат
Дополнительное окно (калькулятор):
•	Принимает два числа из главного окна
•	Отображает их в метках
•	Кнопки: +, -, ×, ÷
•	При нажатии на кнопку — производит операцию и закрывается
•	Результат передаётся обратно в главное окно и отображается в TextBlock
Дополнительные фишки:
•	Обработка деления на ноль
•	Проверка, что введены числа (TryParse)

Задание 3: Анкета пользователя
Тема: Сбор данных в дополнительном окне, передача сложного объекта.
Техническое задание:
Главное окно:
•	Кнопка "Заполнить анкету"
•	После закрытия дополнительного окна — отображение всех данных из анкеты
Дополнительное окно:
•	Поля для ввода:
o	Фамилия (TextBox)
o	Имя (TextBox)
o	Возраст (NumericUpDown или TextBox с валидацией)
o	Город (ComboBox: Москва, СПб, Новосибирск, Другой)
o	Дата рождения (DatePicker)
o	Пол (RadioButton: Мужской, Женский)
o	Хобби (CheckBox несколько: Спорт, Музыка, Книги, Игры)
•	Кнопки: "Сохранить" (закрывает окно и передаёт данные) и "Отмена" (закрывает без сохранения)

Задание 4: Множественные окна — Заметки
Тема: Работа с несколькими окнами, управление коллекцией окон.
Техническое задание:
Главное окно:
•	Список (ListBox) всех открытых заметок
•	Кнопка "Создать заметку" — открывает новое окно для каждой заметки
•	Кнопка "Закрыть все заметки" — закрывает все дополнительные окна
•	Label с количеством открытых заметок
Окно заметки (открывается в новом экземпляре):
•	Заголовок TextBox
•	Текст заметки (TextBox с AcceptsReturn=True)
•	Кнопка "Сохранить и закрыть"
•	Кнопка "Закрыть без сохранения"
•	Заголовок окна = заголовок заметки (обновляется при изменении)
Требования:
•	Главное окно должно знать обо всех открытых окнах (List<Window>)
•	При закрытии любого окна заметки — обновляется список и счётчик в главном окне
•	При закрытии главного окна — все окна заметок тоже закрываются
Дополнительные фишки:
•	Возможность редактировать уже созданную заметку (передача ID заметки)
•	Сохранение всех заметок в JSON файл перед закрытием
•	Загрузка заметок при запуске