private void TestsRadioButton_CheckedChanged(object sender, EventArgs e) { if (SpeedTrackBar.Value == 0) { if ((sender as RadioButton).Checked) { int parameterNumber = 1; if (Int32.TryParse((sender as RadioButton).Name.Substring("TestsRadioButton_".Length), out parameterNumber)) { { string text; CultureInfo culture = CultureInfo.CreateSpecificCulture("ru-RU"); float[] floatValues = new float[allMethods.GetLength(0)]; values.Clear(); for (int i = 1; i <= allMethods.GetLength(0); i++) { text = ResultTableLayoutPanel.GetControlFromPosition(i, parameterNumber + 2).Text.Replace(".", culture.NumberFormat.NumberDecimalSeparator); float.TryParse(text, out floatValues[i - 1]); } float maxFloatValue = floatValues.Max(); for (int i = 0; i < floatValues.Length; i++) { // convert value to % floatValues[i] = 100 * floatValues[i] / (maxFloatValue == 0 ? 100 : maxFloatValue); values.Add(Convert.ToInt32(floatValues[i])); } RefillItems(true); } } } } }
private void SpeedTrackBar_ValueChanged(object sender, EventArgs e) { if (SpeedTrackBar.Value == 0) { testsLabel.ForeColor = SystemColors.ControlLight; testsLabel.BackColor = Color.DarkRed; for (int i = 0; i < allMethods.GetLength(0); i++) { ResultTableLayoutPanel.GetControlFromPosition(i + 1, 3).Text = "-"; ResultTableLayoutPanel.GetControlFromPosition(i + 1, 4).Text = "-"; ResultTableLayoutPanel.GetControlFromPosition(i + 1, 5).Text = "-"; } } else { testsLabel.ForeColor = SystemColors.ControlText; testsLabel.BackColor = SystemColors.Control; if (values.Count > maxSortedItemsCount) { values.RemoveRange(maxSortedItemsCount, values.Count - maxSortedItemsCount); } for (int i = 1; i <= 3; i++) { ResultTableLayoutPanel.Controls["TestsRadioButton_" + i.ToString()].Enabled = false; } } testsLabel.Refresh(); }
private void Form1_Shown(object sender, EventArgs e) { for (int i = 1; i < ResultTableLayoutPanel.ColumnCount; i++) { panel3.Controls["radioButton" + i.ToString()].Text = allMethods[i - 1, 0]; Color foreColor = allMethods[i - 1, 3] == "0" ? SystemColors.ControlText : Color.DeepSkyBlue; for (int j = 0; j < ResultTableLayoutPanel.RowCount; j++) { Control control = ResultTableLayoutPanel.GetControlFromPosition(i, j); if (control != null) { if (j == 1) { control.Text = allMethods[i - 1, 0] + " " + allMethods[i - 1, 1]; } if (j == 2) { control.Text = "[" + i.ToString() + "]"; } if (j > 2) { control.Text = "-"; } control.ForeColor = foreColor; } } } for (int i = 1; i <= 3; i++) { ResultTableLayoutPanel.Controls["TestsRadioButton_" + i.ToString()].Enabled = false; } //ResultTableLayoutPanel.Refresh(); //ResultTableLayoutPanel.CellPaint -= ResultTableLayoutPanel_CellPaint; FillTextBox.Focus(); }
private void SortButton_Click(object sender, EventArgs e) { if (sortedItemsCount > 0) { (sender as Button).Enabled = false; int methods = 1; if (SpeedTrackBar.Value == 0) { SpeedTrackBar.Enabled = false; methods = allMethods.GetLength(0); VisualPanel.Controls.Clear(); } string methodName = ""; for (int methodNumber = 1; methodNumber <= methods; methodNumber++) { Label label = new Label(); AlgorithmBase <SortedItem> algorithm = new AlgorithmBase <SortedItem>(); if (SpeedTrackBar.Value > 0) { foreach (RadioButton radioButton in panel3.Controls.OfType <RadioButton>()) { if (radioButton.Checked) { if (!Int32.TryParse(radioButton.Name.Substring("radioButton".Length), out methodNumber)) { methodNumber = 1; } break; } } } if (panel3.Controls.Find("radioButton" + methodNumber.ToString(), false).Any()) { methodName = panel3.Controls["radioButton" + methodNumber.ToString()].Text; } switch (methodName) { case "Bubble Sort": algorithm = new BubbleSort <SortedItem>(); break; case "Cocktail Sort": algorithm = new CocktailSort <SortedItem>(); break; case "Insertion Sort": algorithm = new InsertionSort <SortedItem>(); break; case "Shell Sort": algorithm = new ShellSort <SortedItem>(); break; case "Tree Sort": algorithm = new Algorithm.DataStructures.Tree <SortedItem>(); break; case "Heap Sort": algorithm = new Algorithm.DataStructures.Heap <SortedItem>(); break; case "Selection Sort": algorithm = new SelectionSort <SortedItem>(); break; case "Gnome Sort": algorithm = new GnomeSort <SortedItem>(); break; case "Radix Sort": algorithm = new RadixSort <SortedItem>(RadixSortCheckBox.Checked); break; case "Merge Sort": algorithm = new MergeSort <SortedItem>(); break; case "Quick Sort": algorithm = new QuickSort <SortedItem>(); break; case "Odd-Even Sort": algorithm = new OddEvenSort <SortedItem>(); break; case "Comb Sort": algorithm = new CombSort <SortedItem>(); break; default: algorithm = new BubbleSort <SortedItem>(); break; } //MessageBox.Show("Вы выбрали метод сортировки " + panel3.Controls["radioButton" + methodNumber.ToString()].Text + " : " + methodNumber.ToString()); if (SpeedTrackBar.Value > 0) { algorithm.CompareEvent += AlgorithmCompareEvent; algorithm.SwapEvent += AlgorithmSwapEvent; algorithm.RemoveEvent += AlgorithmRemoveEvent; } else { int verticalInterval = 15; if (methodNumber > 1 && ((methodNumber - 1) % (VisualPanel.Height / verticalInterval)) == 0) { VisualPanel.Controls.Clear(); } label.Name = "label_" + methodNumber.ToString(); label.Text = "Идет сортировка массива из " + items.Count.ToString() + " элементов по методу " + panel3.Controls["radioButton" + methodNumber.ToString()].Text + " ..."; label.AutoSize = true; label.Location = new Point(5, verticalInterval * ((methodNumber - 1) % (VisualPanel.Height / verticalInterval))); VisualPanel.Controls.Add(label); VisualPanel.Refresh(); } algorithm.AddRange(items); TimeSpan runTime = algorithm.SortAndGetSpan(!reverseSortCheckBox.Checked); if (SpeedTrackBar.Value == 0) { label.Text = "Сортировка " + items.Count.ToString() + " элементов по методу " + panel3.Controls["radioButton" + methodNumber.ToString()].Text + " завершена."; } else if (methodName == "Heap Sort") { VisualPanel.Controls.Clear(); sortedItemsCount = 0; for (int i = 0; i < algorithm.Items.Count; i++) { SortedItem item = new SortedItem(VisualPanel, ++sortedItemsCount, algorithm.Items[i].Value); VisualPanel.Refresh(); } VisualPanel.Refresh(); } ResultTableLayoutPanel.GetControlFromPosition(methodNumber, 3).Text = runTime.Seconds.ToString() + "." + runTime.Milliseconds.ToString(); ResultTableLayoutPanel.GetControlFromPosition(methodNumber, 4).Text = algorithm.ComparisonCount.ToString(); ResultTableLayoutPanel.GetControlFromPosition(methodNumber, 5).Text = algorithm.SwapCount.ToString(); VisualPanel.Refresh(); } SpeedTrackBar.Enabled = true; if (SpeedTrackBar.Value == 0) { for (int i = 1; i <= 3; i++) { ResultTableLayoutPanel.Controls["TestsRadioButton_" + i.ToString()].Enabled = true; } } } }