/// <summary> /// Обработчик нажатия на кнопку сохранения параметров. /// Появляется окно выбора директории, затем файл /// записывается в выбранное место. Также обрабатываются /// исключения, которые могут возникнуть при записи. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void bSave_Click(object sender, EventArgs e) { string path = ""; if (saveFileInput.ShowDialog() == DialogResult.OK) { path = saveFileInput.FileName; } try { File.WriteAllLines(path, new string[] { N.ToString(), Mu.ToString(), Mv.ToString(), Um.ToString(), Vm.ToString(), du.ToString(), dv.ToString(), u.ToString(), v.ToString(), a.ToString(), Tc.ToString(), up1.ToString(), up2.ToString(), vp1.ToString(), vp2.ToString(), Ap1.ToString(), Ap2.ToString(), gamma.ToString(), _mu.ToString(), H.ToString(), pq.ToString() }); } catch (FileNotFoundException) { MessageBox.Show("Файл не существует. " + "Начните заново."); } catch (IOException) { MessageBox.Show("Ошибка в работе с файлом." + " Начните заново."); } catch (UnauthorizedAccessException) { MessageBox.Show("Ошибка доступа к файлу:" + " нет разрешения на доступ. Начните заново."); } catch (System.Security.SecurityException) { MessageBox.Show("Ошибка безопасности при " + "работе с файлом. Начните заново."); } catch (Exception ex) { MessageBox.Show("Произошла ошибка: " + ex.Message); } finally { MessageBox.Show("Работа с файлом окончена."); } }
/// <summary> /// Обработчик нажатия на кнопку перехода к /// дальнейшей работе с данными, происходит /// запись файла входных параметров, создание /// и открытие новой формы на основе текущей, /// сокрытие текущей формы. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void bProceed_Click(object sender, EventArgs e) { try { File.WriteAllLines("Input.txt", new string[] { N.ToString(), Mu.ToString(), Mv.ToString(), Um.ToString(), Vm.ToString(), du.ToString(), dv.ToString(), u.ToString(), v.ToString(), a.ToString(), Tc.ToString(), up1.ToString(), up2.ToString(), vp1.ToString(), vp2.ToString(), Ap1.ToString(), Ap2.ToString(), gamma.ToString(), _mu.ToString(), H.ToString(), pq.ToString() }); } catch (Exception ex) { MessageBox.Show("Произошла ошибка: " + ex.Message); } this.Hide(); new Operations(this, prevForm, funcs, N, Mu, Mv, Um, Vm, du, dv, u, v, a, Tc, up1, up2, vp1, vp2, Ap1, Ap2, gamma, _mu, H, pq).Show(); }
/// <summary> /// Метод, задающий внешний вид формы и значения /// параметров симуляции их дефолтными значениями, /// тут же происходит натсройка текста надписей /// и подсказок для пользователя. /// </summary> void Begin() { panel.BackColor = panelColor; foreach (Button b in GetAllControlsOfType <Button>(this)) { b.FlatAppearance.MouseOverBackColor = hoverColor; b.ForeColor = textColor; } foreach (Label l in GetAllControlsOfType <Label>(this)) { l.ForeColor = textColor; } du = dv = Um = Vm = 0.1666667f; u = v = vp1 = vp2 = gamma = 0; a = 0.42f; Tc = 20; up1 = 0.03125f; up2 = -0.03125f; Ap1 = Ap2 = 300; _mu = 3000; H = 7; N = 128; Mu = Mv = 8; pq = 576; lN.Text = $"N = {N}"; lMu.Text = $"Mu = {Mv}"; lMv.Text = $"Mv = {Mu}"; lUm.Text = $"Um = {Um}"; lVm.Text = $"Vm = {Vm}"; ldu.Text = $"du = {dv}"; ldv.Text = $"dv = {dv}"; lu.Text = $"u = {u}"; lv.Text = $"v = {v}"; lTc.Text = $"Tc = {Tc}"; la.Text = $"a = {a}"; lup1.Text = $"up1 = {up1}"; lup2.Text = $"up2 = {up2}"; lvp1.Text = $"vp1 = {vp1}"; lvp2.Text = $"vp2 = {vp2}"; lAp1.Text = $"Ap1 = {Ap1}"; lAp2.Text = $"Ap2 = {Ap2}"; lgamma.Text = $"gamma = {gamma}"; l_mu.Text = $"_mu = {_mu}"; lH.Text = $"H = {H}"; lpq.Text = $"pq = {pq}"; InN.Text = N.ToString(); InMu.Text = Mu.ToString(); InMv.Text = Mu.ToString(); InUm.Text = Um.ToString(); InVm.Text = Vm.ToString(); Indu.Text = dv.ToString(); Indv.Text = dv.ToString(); Inu.Text = u.ToString(); Inv.Text = v.ToString(); InTc.Text = Tc.ToString(); Ina.Text = a.ToString(); Inup1.Text = up1.ToString(); Inup2.Text = up2.ToString(); Invp1.Text = vp1.ToString(); Invp2.Text = vp2.ToString(); InAp1.Text = Ap1.ToString(); InAp2.Text = Ap2.ToString(); Ingamma.Text = gamma.ToString(); In_mu.Text = _mu.ToString(); InH.Text = H.ToString(); Inpq.Text = pq.ToString(); toolTip.SetToolTip(lN, "Количество векторов наблюдений," + "\nпо которым формируется статистика." + "\nЧисло должно быть целое и больше 0"); toolTip.SetToolTip(lMu, "Количество модулей, на которые" + "\nразбивается антенная решетка по длине" + "\nЧисло должно быть целое и больше 0"); toolTip.SetToolTip(lMv, "Количество модулей, на которые" + "\nразбивается антенная решетка по ширине" + "\nЧисло должно быть целое и больше 0"); toolTip.SetToolTip(lUm, "Ширина главного лепестка диаграммы" + "\nнаправленности модуля по одному углу." + "\nРекомендуемое значение: эффективная" + "\nразрешающая способность модуля " + "\nпо одному измерению - 1/6 радиана"); toolTip.SetToolTip(lVm, "Ширина главного лепестка диаграммы" + "\nнаправленности модуля по другому углу." + "\nРекомендуемое значение: эффективная" + "\nразрешающая способность модуля " + "\nпо одному измерению - 1/6 радиана"); toolTip.SetToolTip(ldu, "Сдвиг до центра " + "просматриваемого сектора\nпо одному углу"); toolTip.SetToolTip(ldv, "Сдвиг до центра" + " просматриваемого сектора\nпо другому углу"); toolTip.SetToolTip(lu, "Предполагаемое положение" + " цели по одному углу,\nизменяется от -1/12 " + "до 1/12 радиана с шагом 1/48 радиана"); toolTip.SetToolTip(lv, "Предполагаемое положение" + " цели по другому углу,\nизменяется от -1/12" + " до 1/12 радиана с шагом 1/48 радиана"); toolTip.SetToolTip(la, "Мощность приходящего сигнала." + "\nЧисло должно быть больше 0"); toolTip.SetToolTip(lTc, "Начало прихода сигнала"); toolTip.SetToolTip(lvp1, "Положение помех по другому углу"); toolTip.SetToolTip(lvp2, "Положение помех по другому углу"); toolTip.SetToolTip(lup1, "Положение помех по одному углу"); toolTip.SetToolTip(lup2, "Положение помех по одному углу"); toolTip.SetToolTip(lAp1, "Мощность помех. " + "Число должно быть больше 0"); toolTip.SetToolTip(lAp2, "Мощность помех. " + "Число должно быть больше 0"); toolTip.SetToolTip(lgamma, "Параметр гамма"); toolTip.SetToolTip(l_mu, "Параметр регуляризации корреляционной" + " матрицы.\nЧисло должно быть больше 0"); toolTip.SetToolTip(lH, "Пороговое значение мощности сигнала" + " для вывода точки.\nЧисло должно быть больше 0"); toolTip.SetToolTip(lpq, "Количество блоков в 36 областях," + "\nпо которым составляется корреляционная матрица." + "\nРекомендуемое значение:" + "\n36 * 2000 отсчетов по времени / N векторов выборки," + "\nв противном случае размерности матриц будут конфликтующими."); toolTip.SetToolTip(bGet, "Для того, чтобы загрузить параметры из файла,\n" + "файл должен соответствовать определенным требованиям:" + "\n-расширение .txt\n-параметры записаны каждый с новой строки без" + "\nдругих разделителей\n-дробные числа записаны через ." + "\n-параметры в файле идут в такой последовательности:" + "\nN, Mu, Mv, Um, Vm, du, dv, u,\nv, a, Tc, up1, up2, vp1, vp2,\n" + "Ap1, Ap2, gamma, mu, H, pq." + "\nВ противном случае считывание будет некорректным."); toolTip.SetToolTip(bExit, "Внимание!" + "\nПри возвращении прогресс текущей сессии будет потерян." + "\nУбедитесь в том, что вы сохранили все файлы," + "\nкоторые не хотите потерять."); }