Ejemplo n.º 1
0
 // обработчик нажатия кнопки формирования склада
 private void ButtonSelectPlatform_Click(object sender, EventArgs e)
 {
     States = ReformingStates.Nothing;
     buttonReformingPlatform.Enabled = false;
     buttonTransferCargo.Enabled     = false;
     ShowModal();
     StartSelectPlatforms();
 }
Ejemplo n.º 2
0
 // обработчик кнопки "Расформировать платформы"
 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;
     }
 }
Ejemplo n.º 3
0
 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;
     }
 }
Ejemplo n.º 4
0
        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;
                }
            }
        }