예제 #1
0
파일: Form1.cs 프로젝트: deWladimir/Lab01
        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;
        }
예제 #2
0
파일: Form1.cs 프로젝트: deWladimir/Lab01
        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;
        }
예제 #3
0
파일: Form1.cs 프로젝트: deWladimir/Lab01
        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();
            }
        }
예제 #4
0
파일: Form1.cs 프로젝트: deWladimir/Lab01
 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);
         }
     }
 }
예제 #5
0
파일: Form1.cs 프로젝트: deWladimir/Lab01
        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);
            }
        }
예제 #6
0
파일: Form1.cs 프로젝트: deWladimir/Lab01
 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;
 }
예제 #7
0
파일: Form1.cs 프로젝트: deWladimir/Lab01
        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;
        }
예제 #8
0
파일: Form1.cs 프로젝트: deWladimir/Lab01
        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);
            }
        }
예제 #9
0
파일: Form1.cs 프로젝트: deWladimir/Lab01
        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);
            }
        }