/**/ //WORK WITH SIZE OF TABLE private void addColumnToolStripMenuItem_Click(object sender, EventArgs e) { string columnName = "C" + this.DataGrid.ColumnCount.ToString(); DataGrid.Columns.Add(columnName, columnName); DataGrid.Columns[DataGrid.ColumnCount - 1].MinimumWidth = 100; for (int i = 0; i < DataGrid.Rows.Count; i++) { DataGrid.Rows[i].Cells[DataGrid.Columns.Count - 1].Value = 0; DataGrid.Rows[i].Cells[DataGrid.Columns.Count - 1].Tag = new Cell("0", "R" + i.ToString() + columnName); } ClientSize = new Size(ClientSize.Width, WinObjFunctions.CountGridHeight(DataGrid)); } private void addRowToolStripMenuItem_Click(object sender, EventArgs e) { var row = (DataGridViewRow)DataGrid.RowTemplate.Clone(); DataGrid.Rows.Add(row); for (int i = 0; i < DataGrid.Rows.Count; i++) { DataGrid.Rows[i].HeaderCell.Value = "R" + i.ToString(); } for (int i = 0; i < DataGrid.Columns.Count; i++) { DataGrid.Rows[DataGrid.Rows.Count - 1].Cells[i].Value = 0; DataGrid.Rows[DataGrid.Rows.Count - 1].Cells[i].Tag = new Cell("0", "R" + (DataGrid.Rows.Count - 1).ToString() + "C" + i.ToString()); } ClientSize = new Size(ClientSize.Width, WinObjFunctions.CountGridHeight(DataGrid)); } private void removeColumnToolStripMenuItem_Click(object sender, EventArgs e) { if (DataGrid.SelectedCells.Count == 0) { return; } int position = DataGrid.SelectedCells[0].ColumnIndex; foreach (DataGridViewRow row in DataGrid.Rows) { foreach (DataGridViewCell elem in row.Cells) { var cell = elem.Tag; formatter.CellColumnDecrease(cell, position); } } DataGrid.Columns.RemoveAt(position); for (int i = position; i < DataGrid.Columns.Count; i++) { DataGrid.Columns[i].HeaderText = "C" + i.ToString(); } RefreshDataGrid(); ClientSize = new Size(ClientSize.Width, WinObjFunctions.CountGridHeight(DataGrid)); } private void removeRowToolStripMenuItem_Click(object sender, EventArgs e) { if (DataGrid.SelectedCells.Count == 0) { return; } int position = DataGrid.SelectedCells[0].RowIndex; foreach (DataGridViewRow row in DataGrid.Rows) { foreach (DataGridViewCell elem in row.Cells) { var cell = elem.Tag; formatter.CellRowDecrease(cell, position); } } DataGrid.Rows.RemoveAt(position); for (int i = 0; i < DataGrid.Rows.Count; i++) { DataGrid.Rows[i].HeaderCell.Value = "R" + i.ToString(); } RefreshDataGrid(); ClientSize = new Size(ClientSize.Width, WinObjFunctions.CountGridHeight(DataGrid)); } private void insertColumnToolStripMenuItem_Click(object sender, EventArgs e) { if (DataGrid.SelectedCells.Count == 0) { return; } int position = DataGrid.SelectedCells[0].ColumnIndex; string columnName = "C" + position.ToString(); foreach (DataGridViewRow row in DataGrid.Rows) { foreach (DataGridViewCell elem in row.Cells) { var cell = elem.Tag; formatter.CellColumnIncrease(cell, position); } } var column = new DataGridViewColumn(); column.CellTemplate = new DataGridViewTextBoxCell(); DataGrid.Columns.Insert(position, column); DataGrid.Columns[position].MinimumWidth = 100; for (int i = position; i < DataGrid.Columns.Count; i++) { DataGrid.Columns[i].HeaderText = "C" + i.ToString(); } for (int i = 0; i < DataGrid.Rows.Count; i++) { DataGrid.Rows[i].Cells[position].Value = 0; DataGrid.Rows[i].Cells[position].Tag = new Cell("0", "R" + i.ToString() + columnName); } RefreshDataGrid(); ClientSize = new Size(ClientSize.Width, WinObjFunctions.CountGridHeight(DataGrid)); } private void insertRowToolStripMenuItem1_Click(object sender, EventArgs e) { if (DataGrid.SelectedCells.Count == 0) { return; } int position = DataGrid.SelectedCells[0].RowIndex; string rowName = "R" + position.ToString(); foreach (DataGridViewRow row in DataGrid.Rows) { foreach (DataGridViewCell elem in row.Cells) { var cell = elem.Tag; formatter.CellRowIncrease(cell, position); } } var newRow = (DataGridViewRow)DataGrid.RowTemplate.Clone(); DataGrid.Rows.Insert(position, newRow); for (int i = 0; i < DataGrid.Rows.Count; i++) { DataGrid.Rows[i].HeaderCell.Value = "R" + i.ToString(); } for (int i = 0; i < DataGrid.Columns.Count; i++) { DataGrid.Rows[position].Cells[i].Value = 0; DataGrid.Rows[position].Cells[i].Tag = new Cell("0", rowName + "C" + i.ToString()); } RefreshDataGrid(); ClientSize = new Size(ClientSize.Width, WinObjFunctions.CountGridHeight(DataGrid)); } private void aboutToolStripMenuItem_Click(object sender, EventArgs e) { string information = "Поради :" + '\n' + "- Вказуйте назви клітинок у формулах за шаблоном R0C0-RNCN" + '\n' + "- Кнопка Insert вставляє рядочок вище видленої клітинки чи колонку лівіше виділеної клітинки" + '\n' + "- Кнопка Delete видаляє рядок чи стовпчик з виділеною клітинкою" + '\n' + "- Доступні операції : + - /(аналог DIV) * MIN(,) MAX(,) % (аналог MOD) ^" + '\n' + "- Запитайте у розробника щодо проблем, які виникли в процесі використання" + '\n' + '\n' + "Боровик Олег . К-26 . 2017 (c)"; MessageBox.Show(information, "Інформація"); } /**/ /*CODE BLOCK*/ private void runCodeToolStripMenuItem_Click(object sender, EventArgs e) { Model mod = new Model(CodeBox.Text); try { mod.Block().Calculate(); RefreshDataGrid(); } catch (StackOverflowException ex) { MessageBox.Show("Infinity loops are bad!", "Error"); } catch (RecursionException ev) { MessageBox.Show("There are one or more circular references where a determination of " + ev.var + " cell refers to it`s own cell either directly or indirectly.\r\nTry to fix your mistakes :)", "Error"); } catch (UnknownWordException ev) { string _newFormula = CodeBox.Text; ev.position -= ev.word.Length; CodeBox.Text = _newFormula.Substring(0, ev.position); RichTextBoxExtensions.AppendText(CodeBox, ev.word, Color.Red); RichTextBoxExtensions.AppendText(CodeBox, _newFormula.Substring(ev.position + ev.word.Length), Color.Black); MessageBox.Show("Unknown operator or variable " + ev.word + " was found in your code.\r\nTry to fix your mistakes :)", "Error"); } catch (BadSyntaxException ev) { string _newFormula = CodeBox.Text; ev.position -= (ev.token.Length - 1); CodeBox.Text = _newFormula.Substring(0, ev.position); RichTextBoxExtensions.AppendText(CodeBox, ev.token, Color.Red); RichTextBoxExtensions.AppendText(CodeBox, _newFormula.Substring(ev.position + ev.token.Length), Color.Black); MessageBox.Show("Bad syntax at position " + ev.position.ToString() + " was found in your code.\r\nTry to fix your mistakes :)", "Error"); } catch (UnknownSymbolException ev) { string _newFormula = CodeBox.Text; CodeBox.Text = _newFormula.Substring(0, ev.position); RichTextBoxExtensions.AppendText(CodeBox, ev._char.ToString(), Color.Red); RichTextBoxExtensions.AppendText(CodeBox, _newFormula.Substring(ev.position + 1), Color.Black); MessageBox.Show("Unknown symbol at position " + ev.position.ToString() + " was found in your code.\r\nTry to fix your mistakes :)", "Error"); } catch (NullDivisionException ev) { MessageBox.Show("Null division was found in your code.\r\nTry to fix your mistakes :)", "Error"); } catch { MessageBox.Show("I don`t even know what happened. \r\nUrgently call my creator!", "Error"); } }
private void FormulaBoxKeyPressedEvent(object sender, KeyEventArgs e) { if (((e.KeyCode == Keys.Enter)) && (DataGrid.SelectedCells.Count == 1)) { //DataGrid.Focus(); try { FormulaBox.Select(0, FormulaBox.Text.Length); { FormulaBox.SelectionColor = Color.Black; } FormulaBox.SelectionLength = 0; ((Cell)DataGrid.SelectedCells[0].Tag).Formulate = FormulaBox.Text; DataGrid.Focus(); } catch (RecursionException ev) { MessageBox.Show("There are one or more circular references where a formula of " + ev.var + " cell refers to it`s own cell either directly or indirectly.\r\nTry to fix your mistakes :)", "Error"); } catch (UnknownWordException ev) { string _newFormula = FormulaBox.Text; ev.position -= ev.word.Length; FormulaBox.Text = _newFormula.Substring(0, ev.position); RichTextBoxExtensions.AppendText(FormulaBox, ev.word, Color.Red); RichTextBoxExtensions.AppendText(FormulaBox, _newFormula.Substring(ev.position + ev.word.Length), Color.Black); MessageBox.Show("Unknown operator or variable " + ev.word + " was found in your formula.\r\nTry to fix your mistakes :)", "Error"); } catch (BadSyntaxException ev) { string _newFormula = FormulaBox.Text; ev.position -= (ev.token.Length - 1); FormulaBox.Text = _newFormula.Substring(0, ev.position); RichTextBoxExtensions.AppendText(FormulaBox, ev.token, Color.Red); RichTextBoxExtensions.AppendText(FormulaBox, _newFormula.Substring(ev.position + ev.token.Length), Color.Black); MessageBox.Show("Bad syntax at position " + ev.position.ToString() + " was found in your formula.\r\nTry to fix your mistakes :)", "Error"); } catch (UnknownSymbolException ev) { string _newFormula = FormulaBox.Text; FormulaBox.Text = _newFormula.Substring(0, ev.position); RichTextBoxExtensions.AppendText(FormulaBox, ev._char.ToString(), Color.Red); RichTextBoxExtensions.AppendText(FormulaBox, _newFormula.Substring(ev.position + 1), Color.Black); MessageBox.Show("Unknown symbol at position " + ev.position.ToString() + " was found in your formula.\r\nTry to fix your mistakes :)", "Error"); } catch (NullDivisionException ev) { MessageBox.Show("Null division was found in your formula.\r\nTry to fix your mistakes :)", "Error"); } catch { MessageBox.Show("I don`t even know what happened. \r\nUrgently call my creator!", "Error"); } RefreshDataGrid(); } }