/// <summary> /// Обработчик событий при изменении "Количество ограничений" /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void numericCountRestrictions_ValueChanged(object sender, EventArgs e) { // Создаём ячейки int countVariables = Decimal.ToInt32(numericCountVariables.Value); int countRestrictions = Decimal.ToInt32(numericCountRestrictions.Value); DataGridWorker.CreateGrids(_dataGridViewTargetFunction, countVariables, true); DataGridWorker.CreateGrids(_dataGridViewRestrictions, countVariables, countRestrictions, true); DataGridWorker.CreateGrids(_dataGridViewCornerDot, countVariables, true); }
/// <summary> /// Обработчик событий при изменении пункта "Добавить угловую точку" /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void checkBoxCornerDot_CheckedChanged(object sender, EventArgs e) { if (checkBoxCornerDot.Checked == true) { if (_dataGridViewCornerDot.Columns.Count == 0) { int countVariables = Decimal.ToInt32(numericCountVariables.Value); DataGridWorker.CreateGrids(_dataGridViewCornerDot, countVariables, true); } _dataGridViewCornerDot.Visible = true; } else { _dataGridViewCornerDot.Visible = false; } }
/// <summary> /// При загрузке главного окна /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FormMain_Load(object sender, EventArgs e) { // Путь до справки. Для helpProvider helpProvider.HelpNamespace = new Uri(Path.Combine(ExeDirectory, "data\\help\\mainpagehelp.html")).LocalPath; // Для openFileDialog openFileDialog.InitialDirectory = new Uri(Path.Combine(ExeDirectory, "data\\")).LocalPath; // Для saveFileDialog saveFileDialog.InitialDirectory = new Uri(Path.Combine(ExeDirectory, "data\\")).LocalPath; // Создаём ячейки int countVariables = Decimal.ToInt32(numericCountVariables.Value); int countRestrictions = Decimal.ToInt32(numericCountRestrictions.Value); DataGridWorker.CreateGrids(_dataGridViewTargetFunction, countVariables, false); DataGridWorker.CreateGrids(_dataGridViewRestrictions, countVariables, countRestrictions, false); // Настройки по умолчанию radioButtonMin.Checked = true; radioButtonStepByStepMode.Checked = true; }
/// <summary> /// Открыть задачу из файла /// </summary> /// <param name="fileName"></param> private void OpenTaskFromPath(string fileName) { string fileText = File.ReadAllText(fileName); if (fileText == "") { throw new Exception("Файл пуст.\nПожалуйста, проверьте файл и попробуйте ещё раз."); } // Чистим массив от лишних символов fileText = fileText.Replace("\r", ""); fileText = fileText.Replace("= ", ""); // Чистим от последнего /n, если пользователь вдруг нажал Enter после уравнения if (fileText[fileText.Length - 1] == '\n') { fileText = fileText.Remove(fileText.Length - 1); } // Чистим от лишних пробелов fileText = string.Join(" ", fileText.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)); // Определяем макс или мин и очищаем от этого строку if (fileText.Contains("->max") || fileText.Contains("-> max")) { radioButtonMax.Checked = true; fileText = fileText.Replace(" ->max", ""); fileText = fileText.Replace(" -> max", ""); } else { if (fileText.Contains("->min") || fileText.Contains("-> min")) { radioButtonMin.Checked = true; fileText = fileText.Replace(" ->min", ""); fileText = fileText.Replace(" -> min", ""); } else { throw new Exception("В файле отсутствует условие максимизации или минимизации. Пожалуйста, установите это условие вручную."); } } // Делим цельный текст на массив строк с уравнениями string[] tmpText = fileText.Split('\n'); // Создаём список всего уравнения List <List <string> > AllTask = new List <List <string> >(); // Заносим данные в список foreach (string equation in tmpText) { AllTask.Add(new List <string>(equation.Split(' '))); } // Делим на целевую и ограничения List <List <string> > targetFunction = new List <List <string> >(); targetFunction.Add(new List <string>()); targetFunction[0] = AllTask[0]; // Удаляем целевую функцию из списка AllTask.Remove(AllTask.First()); List <List <string> > restrictions = new List <List <string> >(AllTask); // Заносим целевую функцию в Ячейки DataGridWorker.SetParamToGrids(_dataGridViewTargetFunction, targetFunction, true); // Создаём угловую точку DataGridWorker.CreateGrids(_dataGridViewCornerDot, targetFunction[0].Count, true); // Ограничения DataGridWorker.SetParamToGrids(_dataGridViewRestrictions, restrictions, true); }