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); }
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)); } }