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


Принято, вы абсолютно правы! Перечитал условие внимательнее. Пункт 4 звучит как *«меню со вкладками»* — в терминологии Windows Forms это относится к выпадающим вкладкам самого компонента **MenuStrip** (работа через вложенные подменю), а не к отдельному визуальному элементу TabControl.
Убираем TabControl нафиг, чтобы он не загромождал интерфейс, и переносим всё поздравление прямо на главную форму MainForm.
## Шаг 1. Дизайн главной формы (MainForm) без лишних элементов
Теперь у вас чистая форма, на которой элементы располагаются свободно. Разместите их в удобном месте (например, по центру формы):
| Элемент | Имя в свойствах (Name) | Что написать в свойстве Text / Items |
|---|---|---|
| **Label** | *не важно* | Введите имя: |
| **TextBox** | txtName | *(пустое поле)* |
| **Label** | *не важно* | Выберите праздник: |
| **ComboBox** | cmbHolidays | В свойство **Items** (с новой строки):
• Новым Годом
• Днем Рождения
• 8 Марта
• 23 Февраля |
| **Label** | *не важно* | Какой подарок подарим? |
| **TextBox** | txtPresent | *(пустое поле)* |
| **Button** | btnGenerateCongratulation | **Сгенерировать поздравление** |
| **Button** | btnPlayVideo | **Смотреть видео-поздравление** |
| **Label** | lblCongratulationResult | *(здесь будет текст готового поздравления)* |
Также на форме остаются **MenuStrip** (верхнее меню) и **StatusStrip** (нижняя строка состояния).
## Шаг 2. Обновленный чистый код для MainForm.cs
Дважды кликните по кнопкам «Сгенерировать...» и «Смотреть видео...», чтобы привязать к ним события, а затем замените код формы на этот:
```csharp
using System;
using System.Diagnostics; // Для запуска файлов и ссылок
using System.IO;
using System.Windows.Forms;

namespace FinalProject
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            
            // Инициализация строки с разработчиком (Пункт 1)
            lblDeveloperInfo.Text = "Разработчик: Иванов И.И. Группа: ЭВМ-22";
        }

        // Обновление времени в строке состояния (Пункт 5)
        private void statusTimer_Tick(object sender, EventArgs e)
        {
            lblTime.Text = "Текущее время: " + DateTime.Now.ToLongTimeString();
        }

        // Вывод данных о разработчике через MenuStrip (Пункт 1)
        private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Программа объединения лабораторных работ.\nРазработчик: Студент Иванов И.И.", "О разработчике");
        }

        // ОТЧЕТ - Открытие документа Word (Пункт 6)
        private void открытьОтчетWordToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string docPath = Path.Combine(Application.StartupPath, "report.docx");

            if (File.Exists(docPath))
            {
                Process.Start(new ProcessStartInfo(docPath) { UseShellExecute = true });
            }
            else
            {
                MessageBox.Show("Файл отчета 'report.docx' не найден в папке с программой!", "Ошибка");
            }
        }

        // Меню MenuStrip - Запуск первой лабораторной (Пункт 4, 7)
        private void лабораторная1ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string exePath = Path.Combine(Application.StartupPath, "Lab1.exe");
            LaunchExe(exePath);
        }

        // Меню MenuStrip - Запуск второй лабораторной (Пункт 4, 7)
        private void лабораторная2ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string exePath = Path.Combine(Application.StartupPath, "Lab2.exe");
            LaunchExe(exePath);
        }

        // Метод для безопасного запуска exe-файлов
        private void LaunchExe(string path)
        {
            if (File.Exists(path))
            {
                Process.Start(path);
            }
            else
            {
                MessageBox.Show($"Файл программы по пути:\n{path}\nне найден!", "Ошибка запуска");
            }
        }

        // Контекстное меню (ПКМ по форме) - Очистка полей (Пункт 10)
        private void очиститьФормуToolStripMenuItem_Click(object sender, EventArgs e)
        {
            txtName.Text = "";
            txtPresent.Text = "";
            cmbHolidays.SelectedIndex = -1;
            lblCongratulationResult.Text = "";
        }

        // Кнопка генерации поздравления (Пункт 11)
        private void btnGenerateCongratulation_Click(object sender, EventArgs e)
        {
            string name = txtName.Text;
            string holiday = cmbHolidays.SelectedItem?.ToString() ?? "праздником";
            string present = txtPresent.Text;

            if (string.IsNullOrEmpty(name))
            {
                MessageBox.Show("Пожалуйста, введите имя получателя!", "Внимание");
                return;
            }

            // Выводим сгенерированный текст на форму
            lblCongratulationResult.Text = $"Дорогой(ая) {name}!\n" +
                                           $"От всей души поздравляю тебя с {holiday}!\n" +
                                           $"Желаю счастья, успехов в учебе и дарю тебе {present}!";
        }

        // Кнопка просмотра видео (Пункт 11)
        private void btnPlayVideo_Click(object sender, EventArgs e)
        {
            string videoUrl = "https://yadi.sk/d/G6jX59V0OOr65Q"; 

            try
            {
                Process.Start(new ProcessStartInfo(videoUrl) { UseShellExecute = true });
            }
            catch (Exception ex)
            {
                MessageBox.Show("Не удалось открыть ссылку: " + ex.Message, "Ошибка");
            }
        }
    }
}

```
## Шаг 3. Краткая инструкция, как всё запустить
 1. **Удалите старый TabControl** с формы, если вы его добавляли — просто кликните по нему и нажмите Delete.
 2. Расставьте элементы для ввода имени, праздника и подарка прямо на чистой панели формы (как описано в Шаге 1).
 3. Замените код в файле MainForm.cs на новый код из этой инструкции.
 4. Проверьте, что имена всех кнопок и текстовых полей в панели **Properties** (txtPresent, txtName, cmbHolidays, btnPlayVideo и т.д.) строго совпадают с теми, что используются в коде.
 5. Не забудьте закинуть файлы Lab1.exe, Lab2.exe и report.docx в папку ВашПроект/bin/Debug/, чтобы кнопки в верхнем меню могли их открыть при нажатии.