Загрузка данных
Это итоговое комплексное задание, объединяющее множество компонентов Windows Forms. Чтобы реализовать всё аккуратно и логично, лучше разбить проект на две формы:
1. **LoginForm** — форма входа (логин, пароль и полоса загрузки).
2. **MainForm** — главная форма, которая открывается после успешного входа и содержит меню, вкладки, запуск файлов и поздравления.
Ниже представлена пошаговая инструкция с дизайном интерфейса и кодом для каждого ключевого пункта задания.
### Шаг 1. Создание формы входа (LoginForm)
Создайте новую форму или переименуйте базовую в LoginForm.
**Элементы на форме:**
* TextBox с именем txtLogin (для логина).
* TextBox с именем txtPassword. В свойствах установите UseSystemPasswordChar = True (чтобы скрывать символы пароля).
* Button с именем btnLogin и текстом «Войти».
* ProgressBar с именем progressBar1.
* Timer с именем loginTimer. В свойствах установите Interval = 50 (скорость заполнения полосы загрузки).
**Код для LoginForm.cs:**
```csharp
using System;
using System.Windows.Forms;
namespace FinalProject
{
public partial class LoginForm : Form
{
public LoginForm()
{
InitializeComponent();
}
private void btnLogin_Click(object sender, EventArgs e)
{
// Простая проверка логина и пароля
if (txtLogin.Text == "admin" && txtPassword.Text == "1234")
{
// Если верно, запускаем таймер имитации загрузки
loginTimer.Start();
}
else
{
MessageBox.Show("Неверный логин или пароль!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void loginTimer_Tick(object sender, EventArgs e)
{
if (progressBar1.Value < 100)
{
progressBar1.Value += 5; // Заполняем полосу загрузки
}
else
{
loginTimer.Stop();
this.Hide(); // Прячем форму входа
MainForm mainForm = new MainForm();
mainForm.ShowDialog(); // Открываем главную форму
this.Close(); // Закрываем приложение после закрытия главной формы
}
}
}
}
```
### Шаг 2. Создание главной формы (MainForm)
Создайте вторую форму и назовите её MainForm.
**Размещение основных элементов:**
1. **MenuStrip** (menuStrip1): Перетащите на форму. Создайте структуру меню:
* *Файл* -> *Открыть отчет Word*
* *Лабораторные* -> *Лабораторная 1*, *Лабораторная 2*, *Кредитный калькулятор*
* *О программе* (для вывода данных о разработчике)
2. **StatusStrip** (statusStrip1): Добавьте элемент. Внутри него добавьте StatusLabel с именем lblTime (для часов) и еще один для «другой информации».
3. **Timer** (statusTimer): Для обновления времени в строке состояния. Enabled = True, Interval = 1000.
4. **TabControl** (tabControl1): Добавьте на форму.
* На первую вкладку (TabPage1) мы поместим интерфейс «Поздравления».
5. **ContextMenuStrip** (contextMenuStrip1): Перетащите на форму. Добавьте туда пункты (например, «Очистить всё» или «Запустить калькулятор»). Привяжите его к самой форме в свойстве формы ContextMenuStrip.
### Шаг 3. Реализация логики работы с файлами (.exe и .doc) и интерфейса
Для открытия сторонних программ и документов C# использует пространство имен System.Diagnostics.
Положите ваши .exe файлы прошлых лабораторных работ и файл отчета report.docx в папку проекта bin/Debug/ (или укажите к ним полные пути).
**Код для 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();
// Инициализация данных разработчика
lblDeveloperInfo.Text = "Разработчик: Иванов И.И.\nГруппа: ЭВМ-22";
}
// 5) Строка состояния с текущим временем
private void statusTimer_Tick(object sender, EventArgs e)
{
lblTime.Text = "Текущее время: " + DateTime.Now.ToLongTimeString();
}
// 1) Данные о разработчике (через пункт меню)
private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("Программа объединения лабораторных работ.\nРазработчик: Студент Иванов И.И.", "О разработчике");
}
// 6) ОТЧЕТ - Загрузка документа Word
private void открытьОтчетWordToolStripMenuItem_Click(object sender, EventArgs e)
{
string docPath = Path.Combine(Application.StartupPath, "report.docx");
if (File.Exists(docPath))
{
// Открывает документ в MS Word по умолчанию в системе
Process.Start(new ProcessStartInfo(docPath) { UseShellExecute = true });
}
else
{
MessageBox.Show("Файл отчета 'report.docx' не найден в папке приложения!", "Ошибка");
}
}
// 4, 7) Меню со вкладками / Меню MenuStrip - запуск .exe файлов
private void лабораторная1ToolStripMenuItem_Click(object sender, EventArgs e)
{
string exePath = Path.Combine(Application.StartupPath, "Lab1.exe");
LaunchExe(exePath);
}
private void лабораторная2ToolStripMenuItem_Click(object sender, EventArgs e)
{
string exePath = Path.Combine(Application.StartupPath, "Lab2.exe");
LaunchExe(exePath);
}
// Вспомогательный метод запуска
private void LaunchExe(string path)
{
if (File.Exists(path))
{
Process.Start(path);
}
else
{
MessageBox.Show($"Файл по пути {path} не найден!", "Ошибка запуска");
}
}
// 8) Переход на другую форму (если требуется вызвать еще одно окно)
private void btnOpenSubForm_Click(object sender, EventArgs e)
{
Form subForm = new Form();
subForm.Text = "Дополнительное окно";
subForm.Show();
}
// 10) Выполнение операции через правую кнопку мыши (Контекстное меню)
private void очиститьФормуToolStripMenuItem_Click(object sender, EventArgs e)
{
txtName.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}!";
}
}
}
```
### Шаг 4. Добавление изображений возле названий (Пункт 9)
Чтобы добавить иконки и картинки возле пунктов меню или кнопок:
1. Выберите элемент (например, пункт меню лабораторная1ToolStripMenuItem).
2. В панели свойств найдите поле **Image** и нажмите кнопку с троеточием ....
3. Выберите «Локальный ресурс» -> «Импорт» и выберите небольшую картинку/иконку формата .png или .ico с вашего компьютера.
### Как заставить проект работать корректно:
1. Убедитесь, что в файле Program.cs главной точкой входа назначена первая форма: Application.Run(new LoginForm());.
2. Перенесите готовые скомпилированные .exe файлы от ваших старых лабораторных работ (переименовав их в Lab1.exe, Lab2.exe и т.д.) и ваш вордовский документ report.docx прямо в папку, где лежит исполняемый файл текущего проекта (обычно это ВашПроект/bin/Debug/ или bin/Release/). Тогда относительные пути Path.Combine(Application.StartupPath, ...) сработают безошибочно.