public FormMain() { InitializeComponent(); //Инициализируем переходы и ленту dgvStates = DGV.StatesStart(dgvStates, alphabet, 4); dgvStates = DGV.StatesFormat(dgvStates); dgvRibbon = DGV.RibbonStart(dgvRibbon, alphabet, 500, 2); dgvRibbon = DGV.RibbonFormat(dgvRibbon); }
public static DataGridView openDefault(DataGridView dgv1, string path, string defaultAlphabet) { try { StreamReader sr = new StreamReader(@path); try { //длина и ширина int a = 0; int b = 0; //Считываем длину и ширину a = Convert.ToInt32(sr.ReadLine()); b = Convert.ToInt32(sr.ReadLine()); //Cоздаём новые размеры dgv1.Rows.Clear(); dgv1.Rows.Add(a); dgv1.ColumnCount = b; string newAlphabet = ""; for (int i = 0; i < a; i++) { string[] mas = sr.ReadLine().Split(';'); for (int j = 0; j < b; j++) { //переписываем в dgv dgv1.Rows[i].Cells[j].Value = mas[j]; //Если не нулевая ячейка, то считываем алфавит if (j == 0 && i != 0) { newAlphabet += mas[j]; } } } dgv1 = DGV.StatesFormat(dgv1); return(dgv1); } catch { MessageBox.Show("Проблемы считывания стандартного алгоритма"); dgv1 = DGV.StatesStart(dgv1, defaultAlphabet, 4); return(dgv1); } finally { sr.Close(); } } catch { MessageBox.Show("Стандартный алгоритм не найден"); dgv1 = DGV.StatesStart(dgv1, defaultAlphabet, 4); return(dgv1); } }
private void новыйToolStripMenuItem_Click(object sender, EventArgs e) { //очищаем dgv dgvStates.Rows.Clear(); //Алфавит берём дефолтный alphabet = defaultAlphabet; //Запускаем нашу dgv dgvStates = DGV.StatesStart(dgvStates, alphabet, 4); dgvStates = DGV.StatesFormat(dgvStates); }
private void radioButtonRibbon_CheckedChanged(object sender, EventArgs e) { operandsModeForm = false; numericUpDownA.Visible = false; numericUpDownB.Visible = false; labelA.Visible = false; labelB.Visible = false; dgvRibbon = DGV.RibbonClear(dgvRibbon, alphabet); dgvRibbon = DGV.RibbonReadOnly(dgvRibbon, false); }
private void buttonClearRibbon_Click(object sender, EventArgs e) { string oldAlphabet = alphabet; alphabet = ""; for (int i = 1; i < dgvStates.Rows.Count; i++) { alphabet += dgvStates.Rows[i].Cells[0].Value.ToString(); } if (Analyzer.alphabetAnalysis(dgvStates, alphabet)) { dgvRibbon = DGV.RibbonClear(dgvRibbon, alphabet); dgvStates = DGV.toWhite(dgvStates, 0); dgvStates.Rows[0].Cells[0].Style.BackColor = Color.Gray; dgvRibbon = DGV.toWhite(dgvRibbon, 1); } else { alphabet = oldAlphabet; } }
public static DataGridView open(DataGridView dgv1, string defaultAlphabet) { //Файловый диалог OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "Algorithm of Turing machines|*.tma"; ofd.Title = "Открыть алгоритм"; //Открываем и ждём нажатия кнопки if (ofd.ShowDialog() == DialogResult.OK) { //Открываем поток с нашим файлом StreamReader sr = new StreamReader(ofd.FileName); //ошибка считывания либо синтаксиса bool ex = false; //длина и ширина int a = 0; int b = 0; try { //Считываем длину и ширину(пытаемся) a = Convert.ToInt32(sr.ReadLine()); b = Convert.ToInt32(sr.ReadLine()); //Создаём новые размеры dgv1.Rows.Clear(); dgv1.Rows.Add(a); dgv1.ColumnCount = b; //заводим переменную для нового алфавита, который будет считан string newAlphabet = ""; for (int i = 0; i < a; i++) { //Считываем в массив строк string[] mas = sr.ReadLine().Split(';'); //Если количество ; и столбцов не совпало хотя бы раз, то ex и уходим if (mas.Length != b + 1) { ex = true; MessageBox.Show("Неверный формат файла"); break; } for (int j = 0; j < b; j++) { //переписываем в dgv dgv1.Rows[i].Cells[j].Value = mas[j]; //Если не нулевая ячейка, то считываем алфавит if (j == 0 && i != 0) { newAlphabet += mas[j]; } if (ex) { break; } } if (ex) { break; } } if (ex) { dgv1 = DGV.StatesStart(dgv1, defaultAlphabet, 4); dgv1 = DGV.StatesFormat(dgv1); } else { dgv1 = DGV.StatesFormat(dgv1); return(dgv1); } } //Если вылетели по ошибке, то загружаем новый алгоритм catch { MessageBox.Show("Неверный формат файла"); ex = true; dgv1 = DGV.StatesStart(dgv1, defaultAlphabet, 4); dgv1 = DGV.StatesFormat(dgv1); return(dgv1); } //В любом случае нужно закрыть поток finally { sr.Close(); } } return(dgv1); }
//Кнопка старта private void buttonStart_Click(object sender, EventArgs e) { if (buttonStart.Text == "Старт") { //Шаманство с алфавитом string oldAlphabet = alphabet; alphabet = ""; for (int i = 1; i < dgvStates.Rows.Count; i++) { try { alphabet += dgvStates.Rows[i].Cells[0].Value.ToString(); } catch { dgvStates.Rows[i].Cells[0].Value = ""; } } //Белим dgvStates = DGV.toWhite(dgvStates, 0); dgvStates.Rows[0].Cells[0].Style.BackColor = Color.Gray; dgvRibbon = DGV.toWhite(dgvRibbon, 1); dgvStates.ClearSelection(); shift = 1; if (operandsModeForm) { if (operandA + operandB + 1 + shift > dgvRibbon.ColumnCount) { dgvRibbon.ColumnCount += (operandA + operandB + 1 + 1) - dgvRibbon.ColumnCount; } for (int i = 0; i < shift; i++) { dgvRibbon.Rows[1].Cells[i].Value = alphabet[0]; } for (int i = shift; i < operandA + shift; i++) { dgvRibbon.Rows[1].Cells[i].Value = alphabet[2]; } dgvRibbon.Rows[1].Cells[operandA + shift].Value = alphabet[1]; for (int i = operandA + 1 + shift; i < operandA + operandB + 1 + shift; i++) { dgvRibbon.Rows[1].Cells[i].Value = alphabet[2]; } for (int i = operandA + operandB + 1 + shift; i < dgvRibbon.ColumnCount; i++) { dgvRibbon.Rows[1].Cells[i].Value = alphabet[0]; } //dgvRibbonFormat(); dgvRibbon = DGV.RibbonFormat(dgvRibbon); } if (Analyzer.alphabetAnalysis(dgvStates, alphabet) && Analyzer.syntacticAnalysis(dgvStates, alphabet, states) && Analyzer.semanticAnalysis(dgvStates, dgvRibbon, alphabet, states) && Analyzer.ribbonAnalysis(dgvRibbon, alphabet)) { blockOnStart(); colorIndexRibon = 0; colorIndexStates1 = 0; colorIndexStates2 = 0; start(); } else { alphabet = oldAlphabet; } } else if (buttonStart.Text == "Пауза") { trackBarSpeed.Enabled = true; timerAuto.Enabled = false; buttonStart.Text = "Продолжить"; } else if (buttonStart.Text == "Продолжить") { trackBarSpeed.Enabled = false; timerAuto.Interval = speed; timerAuto.Enabled = true; buttonStart.Text = "Пауза"; } else if (buttonStart.Text == "Стоп") { step(true); } }