// обработчик нажатия кнопки формирования склада private void ButtonSelectPlatform_Click(object sender, EventArgs e) { States = ReformingStates.Nothing; buttonReformingPlatform.Enabled = false; buttonTransferCargo.Enabled = false; ShowModal(); StartSelectPlatforms(); }
// обработчик кнопки "Расформировать платформы" private void buttonReformingPlatform_Click(object sender, EventArgs e) { if (States == ReformingStates.Nothing) { RefrehsGrid(RefrehType.OnlyEnable); States = ReformingStates.Select; buttonReformingPlatform.Text = "Выбрать платформы"; tableLayoutPanel1.Enabled = true; buttonTransferCargo.Enabled = false; buttonSelectPlatform.Enabled = false; buttonReformingPlatform.Enabled = false; } }
private void buttonTransferCargo_Click(object sender, EventArgs e) { if (States == ReformingStates.TransferCargo) { States = ReformingStates.Nothing; buttonTransferCargo.Text = "Переместить груз"; buttonReformingPlatform.Enabled = true; buttonSelectPlatform.Enabled = true; tableLayoutPanel1.Enabled = false; } else if (States == ReformingStates.Nothing) { States = ReformingStates.TransferCargo; RefrehsGrid(RefrehType.OnlyEnable); cargo.Clear(); firstPlatformPicket = null; buttonTransferCargo.Text = "Закончить"; buttonReformingPlatform.Enabled = false; buttonSelectPlatform.Enabled = false; tableLayoutPanel1.Enabled = true; } }
private void ButtonPicketClick(object sender, EventArgs e) { bool intersect = false; Button button = (Button)sender; int picketNumber = Int32.Parse(button.Text); Point point = new Point(tableLayoutPanel1.GetColumn(button), tableLayoutPanel1.GetRow(button)); // текущий выделенный прямоугольник Rectangle currentRect = new Rectangle(firstPicketButton.X, firstPicketButton.Y, point.X - firstPicketButton.X, point.Y - firstPicketButton.Y); // если режим выделения платформ if (States == ReformingStates.Select) { // перебрать площадки и выделить их кнопки бордером красным цветом for (int i = 0; i < platforms.Count(); i++) { for (int j = 0; j < platforms[i].Count(); j++) { if (button.Text == platforms[i][j].ToString()) { for (int k = 0; k < platforms[i].Count(); k++) { Control[] controls = tableLayoutPanel1.Controls.Find(platforms[i][k].ToString(), false); if (controls != null && controls.Length > 0) { Button btnFind = controls[0] as Button; btnFind.FlatAppearance.BorderColor = Color.Red; } } } } } // добавить площадки в переменную для удаления for (int i = 0; i < platforms.Length; i++) { for (int j = 0; j < platforms[i].Length; j++) { if (Int32.Parse(button.Text) == platforms[i][j]) { platformsToDelete.Add(platforms[i]); // оператор goto используется для выхода из вложенных циклов оператор break неуместен goto exit; } } } exit :; RefrehsGrid(RefrehType.Partially); // частичная очистка сетки platforms = platformsToDelete.ToArray(); // удаление площадки DeletePlatformsRowsGrid(platformsToDelete); DeletePlatforms(this, EventArgs.Empty); // вызов события для представителя (Presenter) rectangles.Clear(); platformsToDelete.Clear(); States = ReformingStates.Nothing; // вернуть в режим ожидания buttonReformingPlatform.Text = "Расформировать платформы"; } else if (States == ReformingStates.SettingCargo) { // находим платформу по кнопке foreach (int?[] platform in platformsToSetCargo.ToList()) { for (int i = 0; i < platform.Length; i++) { if (Int32.Parse(button.Text) == platform[i]) { // отключаем все кнопки платформы for (int j = 0; j < platform.Length; j++) { Control[] controls = tableLayoutPanel1.Controls.Find(platform[j].ToString(), false); if (controls != null && controls.Length > 0) { Button btnFind = controls[0] as Button; btnFind.Enabled = false; } } platformsToSetCargo.Remove(platform); // оператор goto используется для выхода из вложенных циклов оператор break неуместен goto exit; } } } exit :; ShowModal(picketNumber); if (platformsToSetCargo.Count == 1 || untrackedCargo == 0) { if (platformsToSetCargo.Count != 0) { int?[] pickets = platformsToSetCargo.First(); WithdrawCargo(untrackedCargo, pickets[0]); } untrackedCargo = 0; platformsToSetCargo.Clear(); States = ReformingStates.Nothing; buttonReformingPlatform.Enabled = true; buttonSelectPlatform.Enabled = true; buttonReformingPlatform.Enabled = true; buttonTransferCargo.Enabled = true; tableLayoutPanel1.Enabled = false; } } else if (States == ReformingStates.TransferCargo) { if (firstPlatformPicket != null) { ShowModal(picketNumber); firstPlatformPicket = null; } else { firstPlatformPicket = Int32.Parse(button.Text); } } else { // блок кода отвечает за рисование прямоугольника на сетке if (rectangleFlag) { // закончить отрисовку secondPicketButton = point; rectangleFlag = false; // проверяем на пересечение с другими прямоугольниками foreach (Rectangle rec in rectangles) { if (intersect = IntersectsRectangles(currentRect, rec)) { break; } } if (!intersect) { // если нету пересечения заполняем цветом и добавляем в переменную значения координат FillRectangle(firstPicketButton, point, GetRandomColor(counterPlatform++)); rectangles.Add(currentRect); // если сетка заполнена if (GridIsFilled()) { // обновляем сетку RefrehsGrid(RefrehType.OnSelect); // выводим модальное окно DialogResult result = MessageBox.Show( "Платформы выделены. Начать заново?", "Сообщение", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); if (result == DialogResult.Yes) { StartSelectPlatforms(); } else { // преобразуем прямоугольники в площадки platforms = ConvertRecToPlatforms(); // добавляем все платформы в список для задания груза foreach (int?[] platform in platforms) { platformsToSetCargo.Add(platform); } // вызываем событие установки платформ, SetPlatforms(this, EventArgs.Empty); // переключаем на режим размещения грузов States = ReformingStates.SettingCargo; buttonTransferCargo.Text = "Выберите площадки"; // блокировка кнопок buttonReformingPlatform.Enabled = false; buttonSelectPlatform.Enabled = false; buttonReformingPlatform.Enabled = false; buttonTransferCargo.Enabled = false; } } } } else { // начало рисования прямоугольника firstPicketButton = point; rectangleFlag = true; } } }