/
denispirit
/
informationSystem
Обзор
Документация
Войти
/
denispirit
/
informationSystem
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
InformationSystem/NewRepairRequestForm.cs
265 строк
11 KB
denispirit
Первый коммит. Отправка в репозиторий
29 сен 2025, 10:39
29 сен 2025, 10:39
24ca85c
Код
Авторство
О чём код?
using System; using System.Drawing; using System.Windows.Forms; namespace InformationSystem { public partial class NewRepairRequestForm : Form { private int userId; // ID пользователя private Database db = new Database(); // Экземпляр класса для работы с БД // Конструктор, принимающий ID пользователя public NewRepairRequestForm(int userId) { InitializeComponent(); // Инициализация компонентов формы this.userId = userId; // Сохраняем ID пользователя SetupDeviceTypes(); // Заполняем список типов устройств ApplyStyles(); } private void ApplyStyles() { StyleHelper.ApplyStyle(this); this.Text = "Новая заявка на ремонт"; this.Size = new Size(700, 700); this.Padding = new Padding(20); SetupLayout(); } private void SetupLayout() { this.Controls.Clear(); TableLayoutPanel mainTable = new TableLayoutPanel(); mainTable.Dock = DockStyle.Fill; mainTable.RowCount = 7; mainTable.ColumnCount = 1; mainTable.Padding = new Padding(10); mainTable.BackColor = Color.Transparent; mainTable.RowStyles.Add(new RowStyle(SizeType.Absolute, 60)); mainTable.RowStyles.Add(new RowStyle(SizeType.Absolute, 70)); mainTable.RowStyles.Add(new RowStyle(SizeType.Absolute, 70)); mainTable.RowStyles.Add(new RowStyle(SizeType.Absolute, 70)); mainTable.RowStyles.Add(new RowStyle(SizeType.Absolute, 100)); mainTable.RowStyles.Add(new RowStyle(SizeType.Absolute, 40)); mainTable.RowStyles.Add(new RowStyle(SizeType.Absolute, 50)); // Заголовок Label titleLabel = new Label(); titleLabel.Text = "Новая заявка на ремонт"; titleLabel.Font = StyleHelper.TitleFont; titleLabel.ForeColor = StyleHelper.PrimaryColor; titleLabel.TextAlign = ContentAlignment.MiddleCenter; titleLabel.Dock = DockStyle.Fill; mainTable.Controls.Add(titleLabel, 0, 0); // Тип устройства mainTable.Controls.Add(CreateComboBoxPanel("Тип устройства:", "cmbDeviceType"), 0, 1); mainTable.Controls.Add(CreateInputPanel("Бренд устройства:", "txtBrand"), 0, 2); mainTable.Controls.Add(CreateInputPanel("Модель устройства:", "txtModel"), 0, 3); mainTable.Controls.Add(CreateTextAreaPanel("Описание проблемы:", "txtProblemDescription"), 0, 4); // Счетчик символов lblCharCount = new Label(); StyleHelper.StyleLabel(lblCharCount, false); lblCharCount.Text = "0/500 символов"; lblCharCount.ForeColor = Color.Gray; lblCharCount.TextAlign = ContentAlignment.MiddleRight; lblCharCount.Dock = DockStyle.Bottom; lblCharCount.Height = 20; Panel charCountPanel = new Panel(); charCountPanel.Dock = DockStyle.Fill; charCountPanel.BackColor = Color.Transparent; charCountPanel.Controls.Add(lblCharCount); mainTable.Controls.Add(charCountPanel, 0, 5); // Кнопки Panel buttonPanel = new Panel(); buttonPanel.Dock = DockStyle.Fill; buttonPanel.BackColor = Color.Transparent; Button btnCreate = new Button(); StyleHelper.StyleButton(btnCreate, true); btnCreate.Text = "Создать заявку"; btnCreate.Click += btnCreate_Click_1; btnCreate.Dock = DockStyle.Left; btnCreate.Margin = new Padding(0, 0, 10, 0); Button btnCancel = new Button(); StyleHelper.StyleButton(btnCancel, false); btnCancel.Text = "Отмена"; btnCancel.Click += btnCancel_Click_1; btnCancel.Dock = DockStyle.Right; buttonPanel.Controls.Add(btnCancel); buttonPanel.Controls.Add(btnCreate); mainTable.Controls.Add(buttonPanel, 0, 6); this.Controls.Add(mainTable); } private Panel CreateInputPanel(string labelText, string controlName) { Panel panel = new Panel(); panel.Dock = DockStyle.Fill; panel.BackColor = Color.Transparent; Label label = new Label(); label.Text = labelText; StyleHelper.StyleLabel(label, false); label.Dock = DockStyle.Top; label.Margin = new Padding(0, 0, 0, 5); TextBox textBox = new TextBox(); textBox.Name = controlName; StyleHelper.StyleTextBox(textBox); textBox.Dock = DockStyle.Bottom; switch (controlName) { case "txtBrand": txtBrand = textBox; break; case "txtModel": txtModel = textBox; break; } panel.Controls.Add(textBox); panel.Controls.Add(label); return panel; } private Panel CreateComboBoxPanel(string labelText, string controlName) { Panel panel = new Panel(); panel.Dock = DockStyle.Fill; panel.BackColor = Color.Transparent; Label label = new Label(); label.Text = labelText; StyleHelper.StyleLabel(label, false); label.Dock = DockStyle.Top; label.Margin = new Padding(0, 0, 0, 5); cmbDeviceType = new ComboBox(); StyleHelper.StyleComboBox(cmbDeviceType); cmbDeviceType.Dock = DockStyle.Bottom; SetupDeviceTypes(); panel.Controls.Add(cmbDeviceType); panel.Controls.Add(label); return panel; } private Panel CreateTextAreaPanel(string labelText, string controlName) { Panel panel = new Panel(); panel.Dock = DockStyle.Fill; panel.BackColor = Color.Transparent; Label label = new Label(); label.Text = labelText; StyleHelper.StyleLabel(label, false); label.Dock = DockStyle.Top; label.Margin = new Padding(0, 0, 0, 5); txtProblemDescription = new TextBox(); txtProblemDescription.Multiline = true; txtProblemDescription.ScrollBars = ScrollBars.Vertical; txtProblemDescription.Height = 80; txtProblemDescription.Dock = DockStyle.Fill; txtProblemDescription.Font = StyleHelper.NormalFont; txtProblemDescription.BorderStyle = BorderStyle.FixedSingle; txtProblemDescription.TextChanged += txtProblemDescription_TextChanged_1; panel.Controls.Add(txtProblemDescription); panel.Controls.Add(label); return panel; } // Метод для заполнения выпадающего списка типами устройств private void SetupDeviceTypes() { // Добавляем типы бытовой техники в ComboBox cmbDeviceType.Items.AddRange(new string[] { "Холодильник", "Стиральная машина", "Телевизор", "Микроволновая печь", "Посудомоечная машина", "Пылесос", "Кондиционер", "Электрическая плита", "Духовой шкаф", "Кофемашина", "Чайник", "Утюг", "Фен", "Другое" }); cmbDeviceType.SelectedIndex = 0; // Выбираем первый элемент по умолчанию } private void btnCreate_Click_1(object sender, EventArgs e) { // Проверка описания проблемы if (string.IsNullOrWhiteSpace(txtProblemDescription.Text)) { MessageBox.Show("Опишите проблему с устройством", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); txtProblemDescription.Focus(); // Устанавливаем фокус на поле с ошибкой return; } // Проверка длины описания if (txtProblemDescription.Text.Length > 500) { MessageBox.Show("Описание проблемы не должно превышать 500 символов", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } // Создаем объект заявки RepairRequest newRequest = new RepairRequest { UserId = userId, // Устанавливаем ID пользователя DeviceType = cmbDeviceType.SelectedItem.ToString(), // Получаем выбранный тип устройства Brand = txtBrand.Text.Trim(), // Получаем бренд Model = txtModel.Text.Trim(), // Получаем модель ProblemDescription = txtProblemDescription.Text.Trim() // Получаем описание проблемы }; // Сохраняем заявку в базу данных if (db.CreateRepairRequest(newRequest)) { this.DialogResult = DialogResult.OK; // Устанавливаем успешный результат this.Close(); // Закрываем форму } } private void btnCancel_Click_1(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; // Устанавливаем результат отмены this.Close(); // Закрываем форму } // Обработчик изменения текста в поле описания проблемы private void txtProblemDescription_TextChanged_1(object sender, EventArgs e) { int length = txtProblemDescription.Text.Length; // Получаем длину текста lblCharCount.Text = $"{length}/500 символов"; // Обновляем счетчик символов // Меняем цвет текста в зависимости от длины if (length > 500) { lblCharCount.ForeColor = Color.Red; // Красный цвет при превышении } else if (length > 400) { lblCharCount.ForeColor = Color.Orange; // Оранжевый цвет при приближении к лимиту } else { lblCharCount.ForeColor = Color.Gray; // Серый цвет в норме } } } }