private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) { /*натиснувши на обрану клітинку, починаємо її редагувати, у клітинці з’являється збережений раніше вираз */ int currRow = dataGridView1.CurrentCell.RowIndex; int currCol = dataGridView1.CurrentCell.ColumnIndex; string cellName = Sys26.To26(currCol) + currRow.ToString(); dataGridView1[currCol, currRow].Value = nameToCell[cellName].Exp; }
private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) { /* при виборі клітинки відображаємо її вираз у текстове поле */ int row = dataGridView1.CurrentCell.RowIndex; int col = dataGridView1.CurrentCell.ColumnIndex; string name = Sys26.To26(col) + row.ToString(); textBox1.Text = nameToCell[name].Exp; }
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { /* закінчення редагування виразу */ try { int currRow = dataGridView1.CurrentCell.RowIndex; int currCol = dataGridView1.CurrentCell.ColumnIndex; string cellName = Sys26.To26(currCol) + currRow.ToString(); if (dataGridView1[currCol, currRow].Value == null) { dataGridView1[currCol, currRow].Value = 0; } string temp = dataGridView1[currCol, currRow].Value.ToString(); ClearPointers(cellName); string res = AnalyzeAdresses(cellName, temp); nameToCell[cellName].Exp = temp; nameToCell[cellName].Val = Calculator.Evaluate(res); NewValuesForDepend(cellName); RefreshCells(); } /* оброблення винятків */ catch (ArgumentNullException) { MessageBox.Show("Ви залишили клітинку порожньою! Не робіть так!"); RefreshCells(); } catch (ArgumentOutOfRangeException) { MessageBox.Show("Зациклення"); RefreshCells(); } catch (ArithmeticException ae) { MessageBox.Show(ae.Message); RefreshCells(); } catch (Exception ex) { int currRow = dataGridView1.CurrentCell.RowIndex; int currCol = dataGridView1.CurrentCell.ColumnIndex; string cellName = Sys26.To26(currCol) + currRow.ToString(); nameToCell[cellName].Exp = ""; if (ex.Message == "Div by 0") { MessageBox.Show("Ділення на нуль"); RefreshCells(); return; } MessageBox.Show("Неприпустимі операції або операнди"); RefreshCells(); } }
public Form1() { InitializeComponent(); DataGridInit(6, 6); /*заповнюємо словник*/ for (int i = 0; i < rowNum; ++i) { for (int j = 0; j < columnNum; ++j) { string name = Sys26.To26(j) + i.ToString(); MyCell cell = new MyCell(name); cell.Row = i; cell.Column = j; nameToCell.Add(name, cell); } } }
private void addRow_Click(object sender, EventArgs e) { /* додати рядок */ DataGridViewRow A = new DataGridViewRow(); A.HeaderCell.Value = rowNum.ToString(); dataGridView1.Rows.Add(A); ++rowNum; for (int i = 0; i < columnNum; ++i) { string name = Sys26.To26(i) + (rowNum - 1).ToString(); MyCell mycell = new MyCell(name); mycell.Column = i; mycell.Row = rowNum - 1; nameToCell.Add(name, mycell); } }
private void RefreshCells() { /* оновлюємо таблицю */ for (int i = 0; i < rowNum; ++i) { for (int j = 0; j < columnNum; ++j) { string name = Sys26.To26(j) + i.ToString(); if (nameToCell[name].Val == 0 && nameToCell[name].Exp == "") { dataGridView1[j, i].Value = ""; } else { dataGridView1[j, i].Value = Math.Round(nameToCell[name].Val, 3).ToString(); } } } return; }
private void delRow_Click(object sender, EventArgs e) { /* видалення рядка */ for (int i = 0; i < columnNum; ++i) { if (rowNum == 1) { MessageBox.Show("Заборонено видаляти останній рядок"); return; } string name = Sys26.To26(i) + (rowNum - 1).ToString(); if (nameToCell[name].DependOnMe.Count > 0) { MessageBox.Show("Від клітинки " + name + " є залежні. Видалення неможливе!"); return; } else { if (nameToCell[name].Exp == "" || nameToCell[name].Exp == "0") { nameToCell.Remove(name); } else { foreach (string mc in nameToCell[name].Pointers) { nameToCell[mc].DependOnMe.Remove(name); } nameToCell.Remove(name); } } } dataGridView1.Rows.RemoveAt(rowNum - 1); --rowNum; }
private void DataGridInit(int rows, int columns)//створюємо таблицю заданих розмірів { columnNum = columns; rowNum = rows; for (int i = 0; i < columns; ++i) { DataGridViewColumn A = new DataGridViewColumn(); A.HeaderText = Sys26.To26(i); A.Name = A.HeaderText; MyCell cell = new MyCell(); A.CellTemplate = cell; dataGridView1.Columns.Add(A); } for (int i = 0; i < rows; ++i) { DataGridViewRow A = new DataGridViewRow(); A.HeaderCell.Value = i.ToString(); dataGridView1.Rows.Add(A); } }
private void addCol_Click(object sender, EventArgs e) { /* додати стовпчик */ DataGridViewColumn A = new DataGridViewColumn(); A.HeaderText = Sys26.To26(columnNum); A.Name = A.HeaderText; MyCell mc = new MyCell(); A.CellTemplate = mc; ++columnNum; dataGridView1.Columns.Add(A); for (int i = 0; i < rowNum; ++i) { string name = Sys26.To26(columnNum - 1) + i.ToString(); MyCell mycell = new MyCell(name); mycell.Column = columnNum - 1; mycell.Row = i; nameToCell.Add(name, mycell); } }