private void btBalance_Click(object sender, System.EventArgs e) { Format format = new Format(); string unbalancedReaction = tbReaction.Text; // Неизравенетата реакция unbalancedReaction = unbalancedReaction.Replace('=', ''); // Знакът "равно" се заменя със стрелка за да може да се използват методите на класа "Balance" unbalancedReaction = format.RemoveMultipleSpaces(unbalancedReaction); // Премахват се интервалите, ако са повече от един на дадено място unbalancedReaction = format.AddSpacesAroundPlusAndArrowIfNoSuch(unbalancedReaction); // Добавят се интервали около знаците плюс и стрелка, ако има нужда Validator validator = new Validator(); string valResult = validator.ValidateReaction(unbalancedReaction); // Реакцията се проверява за грешки при въвеждане if (valResult != string.Empty) { MessageBox.Show(valResult, "Грешка в реакцията", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { Balance balance = new Balance(); List <string> molecules; // Списък на веществата участващи в реакцията int moleculesCount = balance.SplitAndCountMolecules(unbalancedReaction, out molecules); // и техният брой List <string> elements; // Списък на участващите химични елементи balance.SplitAndCountElements(unbalancedReaction, out elements); int leftPartMoleculesCount = balance.CountLeftPartMolecules(unbalancedReaction); // Броят на веществата в лявата част на химичната реакция int[,] matrix = balance.CreateMatrix(elements, molecules, leftPartMoleculesCount); // Матрицата на уравненията, чийто колони ще се използват за изчисляване на общата моларна маса на веществото Algebra algebra = new Algebra(); int[] coefficients = algebra.CalcSolution(matrix); // Изчислените коефициенти if (coefficients != null) { string balancedReaction = balance.MergeCoefficientsAndMolecules(coefficients, molecules, leftPartMoleculesCount); // Изравнената реакция rtbReaction.Clear(); // Предварително текстовата кутия се изичства format.ShowBalancedReaction(balancedReaction, rtbReaction); // и в нея се показва форматиранта изравнена реакция tlpStoichiometry.Controls.Clear(); // Изчистват се всички контроли от таблицата под изравнената реакция tlpStoichiometry.RowStyles.Clear(); // също и добавените редове tlpStoichiometry.RowCount = 1; // Установява се началната стойност за броя редове на таблицата CreateHeaderRow(); lbInfo.Visible = false; FillTableLayoutPanel(elements, molecules, matrix, coefficients); // Таблицата се попълва за новата реакция } else { MessageBox.Show("Реакцията не може да бъде еднозначно изравнена!", "ХимЛаб", MessageBoxButtons.OK, MessageBoxIcon.Stop); } } }