/// <summary> /// Metodo per scrivere gli headers (xn, SAB, Cj). /// </summary> /// <param name="table">Tabella da cui prendere i dati.</param> /// <param name="dg">DataGridView in cui scrivere.</param> private static void writeHeaders(cTable table, DataGridView dg) { for (int i = 0; i < table.Functions.Length; i++) { int index = table.Functions[i].IndexOf('<'); if(index < 0) index = table.Functions[i].IndexOf('>'); if(index < 0) index = table.Functions[i].IndexOf('='); string tmp = table.Functions[i].Substring(0, index); string[] tmpArray = Regex.Split(tmp, @"(x\d{1,})"); tmpArray = tmpArray.Where(x => !string.IsNullOrEmpty(x)).ToArray(); //<-- Cancella le celle vuote dg[0, i].Value = 0; dg[1, i].Value = tmpArray[tmpArray.Length - 1]; } dg[1, table.Functions.Length].Value = "Cj"; //GTA San Andreas cit. dg[1, table.Functions.Length + 1].Value = "SAB"; }
void bAnalize_Click(object sender, EventArgs e) { //Ancora da commentare dato che il metodo può essere soggetto a modifiche /* Controlli all'interno della miniForm * exerciseName * cbMinMax * exerciseZ * exerciseFunctions * bClear * bAnalize * bClose */ if (existsControl("button2") && existsControl("label1") && existsControl("button3")) { label1.Dispose(); button2.Dispose(); button3.Dispose(); } //Controlla i coefficienti nella Z //Controlla i coefficienti nelle funzioni TextBox exerciseFunctions = getMiniTextBox("exerciseFunctions"); exerciseFunctions.Lines = exerciseFunctions.Lines.Where(x => !string.IsNullOrEmpty(x)).ToArray(); //Elimina le linee vuote string[] functions = exerciseFunctions.Lines; exerciseFunctions.Clear(); for (int i = 0; i < functions.Length; i++) { functions[i] = validNumbers(functions[i]); exerciseFunctions.Text += functions[i] + Environment.NewLine; } string errore; table = new cTable( getMiniTextBox("exerciseName").Text, //Nome dell'esercizio validNumbers(getMiniTextBox("exerciseZ").Text), //Z dell'esercizio exerciseFunctions.Lines, //Funzioni dell'esercizio getMiniCombo("cbMinMax").SelectedText == "Problema di Massimo" ? "max" : "min", out errore //Eventuali errori ); if (errore != null) { MessageBox.Show(errore); return; } Tables.Add(table); //Se non c'è posiziona la Listbox if (!existsControl("lstExercises")) { placeListBox(); oldSelected = table.exName; } else changeIndex(Tables.Count - 1); //rExpressions.Visible = label1.Visible = button1.Visible = txtZ.Visible = false; //Crea la tabella DataGridView dg; if (existsControl("dg")) this.Controls["dg"].Dispose(); dg = writeDG(table); if (!existsControl("bNext")) { createControlsUnderDG(dg); } this.Controls["insertingWindow"].Dispose(); this.Controls["background"].Dispose(); this.ActiveControl = dg; }
private void nuovoSistemaDaFileToolStripMenuItem_Click(object sender, EventArgs e) { DialogResult res = findFile.ShowDialog(); if (res == DialogResult.OK || res == DialogResult.Yes) { string errore; table = new cTable(findFile.FileName, out errore); if (errore == "errore") { table = Tables[(this.Controls["lstExercises"] as ListBox).SelectedIndex]; MessageBox.Show("Seleziona un file adatto a come scritto nella guida"); } else { if (errore != null) { MessageBox.Show(errore); return; } Tables.Add(table); if (existsControl("button2") && existsControl("label1") && existsControl("button3")) { label1.Dispose(); button2.Dispose(); button3.Dispose(); } //Se non c'è posiziona la Listbox if (!existsControl("lstExercises")) { placeListBox(); oldSelected = Tables[0].exName; } else changeIndex(Tables.Count - 1); //rExpressions.Visible = label1.Visible = button1.Visible = txtZ.Visible = false; //Crea la tabella DataGridView dg; if (existsControl("dg")) this.Controls["dg"].Dispose(); dg = writeDG(table); if (!existsControl("bNext")) { createControlsUnderDG(dg); } else { this.Controls["bNext"].Enabled = true; this.Controls["bEnd"].Enabled = true; this.Controls["labelUscente"].Text = ""; this.Controls["labelEntrante"].Text = ""; this.Controls["labelFine"].Text = ""; } if (existsControl("insertingWindow") && existsControl("background")) { this.Controls["insertingWindow"].Dispose(); this.Controls["background"].Dispose(); } this.ActiveControl = dg; } } }
/// <summary> /// Metodo per scrivere la B. (Ultima colonna) /// </summary> /// <param name="t">Tabella da cui prendere i dati.</param> /// <param name="dg">DataGridView in cui scrivere.</param> private static void writeB(cTable t, DataGridView dg) { for (int r = 0; r < t.Vars.Count; r++) { dg[dg.Columns.Count - 1, r].Value = t.Vars[r][t.Vars[r].Length - 1]; } }
/// <summary> /// Metodo per la creazione del DataGridView. /// </summary> /// <param name="table">L'oggetto della tabella.</param> /// <returns></returns> private DataGridView createDataGrid(cTable table) { DataGridView dg = new DataGridView(); dg.Name = "dg"; dg.ReadOnly = true; dg.AllowUserToAddRows = false; dg.AllowUserToDeleteRows = false; dg.AllowUserToResizeColumns = false; dg.AllowUserToResizeRows = false; dg.Font = new Font("Calibri", 12, FontStyle.Regular); //CB, Base, Var decisionali + Var scarto, B int select = table.nVariabiliArtificiali == 0 ? table.nVariabiliScarto - 1 : table.nVariabiliArtificiali - 1; dg.ColumnCount = 3 + select; dg.RowCount = table.Functions.Length + 2; //le prime due non le conta, Columns.Count - 1; l'ultima non la conta for (int i = 2; i < dg.Columns.Count; i++) { for (int j = 0; j < dg.Rows.Count; j++) { dg.Rows[j].Cells[i].Value = "0"; } } for (int i = 0; i < dg.Columns.Count; i++) { dg.Columns[i].Width = 50; } Control relativePosition = this.Controls["lstExercises"]; Size relativeSize = new Size(375, 100); //La grandezza della textbox delle funzioni dg.Location = new Point(relativePosition.Location.X + relativePosition.Width + 30, relativePosition.Height / 10); dg.Size = new Size(relativeSize.Width + 125, relativeSize.Height + 125); dg.Anchor = AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Left; dg.Columns[0].HeaderText = "Cb"; dg.Columns[1].HeaderText = /* All your */"Base" /* are belong to us */; this.Controls.Add(dg); for (int i = 0; i < select; i++) { dg.Columns[i + 2].HeaderText = "x" + (i + 1); } dg.Columns[select + 2].HeaderText = "b"; return dg; }
/// <summary> /// Metodo per scrivere i numeri all'interno del datagridview. /// </summary> /// <param name="t">Tabella da cui prendere i dati.</param> /// <param name="dg">DataGridView in cui scrivere.</param> private void writeTableNumbers(cTable t, DataGridView dg) { for (int r = 0; r < t.Functions.Length; r++) { //t.nVars per far si che riempisse tutte le caselle delle var decisionali //+1 per riempire quella dello scarto string v = null; if (t.Functions[r].Contains(">=") || t.Functions[r].Contains("=") && !t.Functions[r].Contains("<")) { int index = t.Functions[r].IndexOf('<'); if (index < 0) index = t.Functions[r].IndexOf('>'); if (index < 0) index = t.Functions[r].IndexOf('='); string tmp = t.Functions[r].Substring(0, index); string[] tmpArray = Regex.Split(tmp, @"(x\d{1,})"); tmpArray = tmpArray.Where(x => !string.IsNullOrEmpty(x)).ToArray(); //<-- Cancella le celle vuote v = tmpArray[tmpArray.Length - 1]; } for (int c = 0; c < t.nVariabili + 1; c++) { if (c < t.nVariabili) { dg[c + 2, r].Value = t.coefficientTerms[r][c]; //Scrittura Cj dg[c + 2, dg.RowCount - 2].Value = t.ZArray[c]; } else { //Ho scritto tutti i coefficienti //Scritto la B dg[c + 2 + r, r].Value = t.coefficientTerms[r][c]; //Scrittura M if (v != null) { int columnIndex = getColumnByHeader(dg, v); dg[columnIndex, dg.RowCount - 2].Value = "-M"; } //c + 2 per il fatto delle prime due da non contare //+ r per contare a che funzione sono arrivato //quindi per arrivare all'nesimo scarto } } if (t.nVariabiliArtificiali > 0) { for(int c = (t.nVariabiliArtificiali - t.nVariabili) + 2; c < dg.ColumnCount - 1; c++) { if (t.Functions[r].Contains(">=") || t.Functions[r].Contains("=") && !t.Functions[r].Contains("<")) { dg[c, r].Value = t.coefficientTerms[r][c - t.nVariabili - 1]; } else break; } } } }
/// <summary> /// Metodo scritto per comodità per l'avvio di più metodi. /// </summary> /// <param name="table">L'oggetto della tabella.</param> /// <returns></returns> private DataGridView writeDG(cTable table) { this.table = table; DataGridView dg = createDataGrid(table); writeHeaders(table, dg); writeTableNumbers(table, dg); writeB(table, dg); writeCb(table, dg); writeSab(dg); return dg; }
/// <summary> /// Metodo per scrivere le variabili di base. /// </summary> /// <param name="t">Tabella da cui prendere i dati.</param> /// <param name="dg"><DataGridView in cui scrivere.</param> private void writeCb(cTable t, DataGridView dg) { for (int r = 0; r < t.Functions.Length; r++) { string str = dg[1, r].Value.ToString(); int column = getColumnByHeader(dg, str); int row = t.Functions.Length; dg[0, r].Value = dg[column, row].Value; } }