Загрузка данных
Принято, вы абсолютно правы! Перечитал условие внимательнее. Пункт 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/, чтобы кнопки в верхнем меню могли их открыть при нажатии.