コード例 #1
0
        public bool ChangeVolume(int level = -1, bool Quiet = false)  //изменение объема по заданному уровню (доступ извне)
        {
            double newVolume = 0.0;
            bool   res       = false;

            //отображаем записи таблицы в виде меню
            int MenuChoice  = 0,
                ItemChoice  = 0;
            int currentItem = (level == -1) ? 0 : level;

            string[][] MenuItems = new string[][] { new string[Table.Count] };

            int VolumeAccuracy = 3;     //до какой цифры после запятой писать объем

            //определим точность записи объемов
            double tmpVol = Table.ElementAt(0).Value *Math.Pow(10, VolumeAccuracy);

            while (tmpVol != 0 && VolumeAccuracy <= 10)
            {
                VolumeAccuracy++;
                tmpVol *= 10;
                tmpVol -= Math.Truncate(tmpVol);
            }

            for (int i = 0; i < Table.Count; i++)
            {
                MenuItems[0][i] = Table.ElementAt(i).Key.ToString() + "\t\t" + Table.ElementAt(i).Value.ToString("F" + VolumeAccuracy);
            }

            Menu M = new MenuLibrary.Menu(
                new string[] { "Таблица " + CTid + ". Выберите запись или нажмите <Esc> для возврата" },
                MenuItems,
                "Поиск уровня:",
                Console.WindowHeight - 5);

            do
            {
                M.MenuCicle(out MenuChoice, out ItemChoice, 0, currentItem);
                switch (MenuChoice)
                {
                case -1:        //отмена меню
                    return(false);

                case 0:
                    Console.Clear();
                    Console.Write($"Задайте новое значение объема для уровня {Table.ElementAt(ItemChoice).Key} в куб.м (для отмены пустая строка): ");
                    if (double.TryParse(Console.ReadLine(), out newVolume))
                    {
                        res = _changeVolume(Table.ElementAt(ItemChoice).Key, newVolume);
                        //генерация события
                        if (!Quiet)
                        {
                            OnItemChanged(new CTEventArgs(true, "Объем для уровня " + Table.ElementAt(ItemChoice).Key + " изменен на " + newVolume, 1000));
                        }
                    }
                    else
                    {
                        //генерация события
                        if (!Quiet)
                        {
                            OnItemChanged(new CTEventArgs(false, "Изменение таблицы не произведено", 1500));
                        }
                        res = false;
                    }
                    break;

                default:
                    Console.Clear();
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Ошибка в работе меню изменения записи таблицы!!!\n\nНажмите любую клавишу для выхода...");
                    Console.ReadKey(true);
                    Environment.Exit(-1);
                    break;
                }
            } while (!(MenuChoice == -1 || MenuChoice == 0));

            return(res);
        }
コード例 #2
0
        public void DeletePair(bool Quiet = false)    //удаление пары из таблицы
        {
            int level = 0;

            //отображаем записи таблицы в виде меню
            int MenuChoice  = 0,
                ItemChoice  = 0;
            int currentItem = (level == -1) ? 0 : level;

            string[][] MenuItems = new string[][] { new string[Table.Count] };

            int VolumeAccuracy = 3;     //до какой цифры после запятой писать объем

            //определим точность записи объемов
            double tmpVol = Table.ElementAt(0).Value *Math.Pow(10, VolumeAccuracy);

            while (tmpVol != 0 && VolumeAccuracy <= 10)
            {
                VolumeAccuracy++;
                tmpVol *= 10;
                tmpVol -= Math.Truncate(tmpVol);
            }

            for (int i = 0; i < Table.Count; i++)
            {
                MenuItems[0][i] = Table.ElementAt(i).Key.ToString() + "\t\t" + Table.ElementAt(i).Value.ToString("F" + VolumeAccuracy);
            }

            Menu M = new MenuLibrary.Menu(
                new string[] { "Таблица " + CTid + ". Выберите запись или нажмите <Esc> для возврата" },
                MenuItems,
                "Поиск уровня:",
                Console.WindowHeight - 5);

            do
            {
                M.MenuCicle(out MenuChoice, out ItemChoice, 0, currentItem);
                switch (MenuChoice)
                {
                case -1:        //отмена меню
                    break;

                case 0:
                    Console.Clear();
                    Console.WriteLine("Удалить запись {0} - {1:F3}?\n<Delete> для подтверждения, любая другая клавиша для выхода.",
                                      Table.ElementAt(ItemChoice).Key,
                                      Table.ElementAt(ItemChoice).Value);

                    if (Console.ReadKey(true).Key == ConsoleKey.Delete)
                    {
                        if (Table.Remove(Table.ElementAt(ItemChoice).Key))        //если удалено удачно
                        {
                            //генерация события
                            if (!Quiet)
                            {
                                OnItemDeleted(
                                    new CTEventArgs(
                                        true,

                                        "Запись " + Table.ElementAt(ItemChoice).Key.ToString() +
                                        " - " + Table.ElementAt(ItemChoice).Value.ToString("F3") +
                                        " успешно удалена",

                                        1000));
                            }
                        }
                        else
                        {
                            //генерация события
                            if (!Quiet)
                            {
                                OnItemDeleted(new CTEventArgs(false, "Удаление записи из таблицы не произведено", 1500));
                            }
                        }
                    }
                    return;

                default:
                    Console.Clear();
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Ошибка в работе меню удаления записи таблицы!!!\n\nНажмите любую клавишу для выхода...");
                    Console.ReadKey(true);
                    Environment.Exit(-1);
                    break;
                }
            } while (!(MenuChoice == -1 || MenuChoice == 0));

            //генерация события
            if (!Quiet)
            {
                OnItemDeleted(new CTEventArgs(false, "Удаление записи из таблицы отменено", 1500));
            }
        }