Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
serhiy1994
10 / 10 / 1
Регистрация: 13.05.2013
Сообщений: 53
#1

Неправильная работа одних и тех же фрагментов кода - C#

17.10.2015, 19:12. Просмотров 121. Ответов 0
Метки нет (Все метки)

Имеется 4 текстбокса по 4 элемента. Нужно взять по очереди элементы из каждого ТБ и раскидать по одному случайным образом в другие 4 текстбокса (другими словами, имитация жеребьевки).
Так вот, код для 1 и 4 текстбокса работает правильно, а для 2 и 3 - нет (потому и закомментирован). Притом, что все фрагменты одинаковы, только имена тектсбоксов разные.
В чем может быть проблема?

(пояснение: имеем textBox0, ..., textBox3 для "корзин" и textBox4, ..., textBox7 для "групп").

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;
using System.Windows.Forms;
 
namespace Drawer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        string[] letters = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L" }; //названия групп
        int _nop; //количество "корзин" (ТБ, куда заносятся начальные данные)
 
        //создаем на форме ТБ для "корзин" и для "групп" (куда выводятся результаты)
        void formTextBoxesAndLabels(int NoTB, int X, int Y1, int Y2, string title, bool ifGroup)
        {
            Label[] label = new Label[NoTB];
            for (int i = 0; i < label.Length; i++)
            {
                label[i] = new Label();
                label[i].Location = new Point(20 + i * X, Y1);
                label[i].Name = "Label" + i.ToString();
                label[i].Size = new Size(60, 25);
                if (!ifGroup) label[i].Text = title + (i + 1).ToString();
                else label[i].Text = title + (i + 1).ToString() + "/" + letters[i];
                Controls.Add(label[i]);
            }
            TextBox[] tb = new TextBox[NoTB];
            for (int i = 0; i < tb.Length; i++)
            {
                tb[i] = new TextBox();
                tb[i].Location = new Point(20 + i * X, Y2);
                if (ifGroup)
                {
                    tb[i].Name = "TextBox" + (i + _nop).ToString();
                    tb[i].TabIndex = i + _nop + 4;
                }
                else
                {
                    tb[i].Name = "textBox" + i.ToString();
                    tb[i].TabIndex = i + 4;
                }
                //tb[i].Text = tb[i].Name;
                tb[i].Size = new Size(75, 100);
                tb[i].Multiline = true;
                Controls.Add(tb[i]);
            }
        }
 
        //выдираем данные из ТБ, загоняем в массив из расчета 1 строчка = 1 участник
        string[] getPlayers(TextBox tb)
        {
            Regex r = new Regex("(\n){1,}");
            tb.Text = r.Replace(tb.Text, "\n");
            if (tb.Text.Length == 0) return new string[0];
            string cn = tb.Text.Replace("\n", "|").Replace("\r", "|");
            cn = cn.Replace("||", "|");
            if (cn[cn.Length - 1] == '|') cn = cn.Substring(0, cn.Length - 1);
            string[] tmp = explode("|", cn);
            return tmp;
        }
        string[] explode(string separator, string source)
        {
            return source.Split(new string[] { separator }, StringSplitOptions.None);
        }
 
        //жребий (перемешивание элементов)
        ArrayList ShuffleArrayList(ArrayList source)
        {
            ArrayList sortedList = new ArrayList();
            Random generator = new Random((int)DateTime.Now.Ticks);
            while (source.Count > 0)
            {
                int position = generator.Next(0, source.Count);
                sortedList.Add(source[position]);
                source.RemoveAt(position);
            }
            return sortedList;
        }
 
        //проверка, дабы вводили только цифры (задавание нужного кол-ва "корзин" и групп)
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar) == true) return;
            if (e.KeyChar == (char)Keys.Back) return;
            e.Handled = true;
        }
 
        //спрашиваем, сколько групп и "корзин" надо, потом создаем нужное кол-во текстбоксов
        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == string.Empty || textBox2.Text == string.Empty) MessageBox.Show("Please fill the both fields.");
            else
            {
                if (Convert.ToInt32(textBox1.Text) > 8) textBox1.Text = Convert.ToString(8);
                if (Convert.ToInt32(textBox2.Text) > 12) textBox2.Text = Convert.ToString(12);
                int NoP = Int32.Parse(textBox1.Text);
                int NoG = Int32.Parse(textBox2.Text);
                if (NoP == 0 || NoG == 0) return;
                _nop = NoP;
                formTextBoxesAndLabels(NoP, 90, 90, 120, "Pot", false);
                formTextBoxesAndLabels(NoG, 90, 268, 298, "Group", true);
            }
        }
        
        //собственно жребий и вывод результатов
        private void button2_Click(object sender, EventArgs e)
        {
            //первая корзина = первый ТБ, и т.д.
            var pot1 = new List<string> { }; 
            string[] teams = getPlayers(Controls["textBox0"] as TextBox);
            for (int i = 0; i < teams.Length; i++)
                pot1.Add(teams[i]);
            //перемешиваем эл-ты внутри одной корзины
            ArrayList seedPot1 = new ArrayList(pot1); 
            seedPot1 = ShuffleArrayList(seedPot1);
            //распихиваем перемешанные эл-ты по одному в "группы"
            for (int i = 0; i < seedPot1.Count; i++)
                (Controls["textBox" + ((i + _nop).ToString())] as TextBox).Text += seedPot1[i] + "-\n";
 
            //var pot2 = new List<string> { };
            //teams = getPlayers(Controls["textBox1"] as TextBox);
            //for (int i = 0; i < teams.Length; i++)
            //    pot2.Add(teams[i]);
            //ArrayList seedPot2 = new ArrayList(pot2);
            //seedPot2 = ShuffleArrayList(seedPot2);
            //for (int i = 0; i < seedPot2.Count; i++)
            //    (Controls["textBox" + ((i + _nop).ToString())] as TextBox).Text += seedPot2[i] + "-\n";
 
            //var pot3 = new List<string> { };
            //teams = getPlayers(Controls["textBox2"] as TextBox);
            //for (int i = 0; i < teams.Length; i++)
            //    pot3.Add(teams[i]);
            //ArrayList seedPot3 = new ArrayList(pot3);
            //seedPot3 = ShuffleArrayList(seedPot3);
            //for (int i = 0; i < seedPot3.Count; i++)
            //    (Controls["textBox" + ((i + _nop).ToString())] as TextBox).Text += seedPot3[i] + "-\n";
 
            var pot4 = new List<string> { };
            teams = getPlayers(Controls["textBox3"] as TextBox);
            for (int i = 0; i < teams.Length; i++)
                pot4.Add(teams[i]);
            ArrayList seedPot4 = new ArrayList(pot4);
            seedPot4 = ShuffleArrayList(seedPot4);
            for (int i = 0; i < seedPot4.Count; i++)
                (Controls["textBox" + ((i + _nop).ToString())] as TextBox).Text += seedPot4[i] + "-\n";
        }
    }
}

http://www.cyberforum.ru/windows-forms/thread1445857.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2015, 19:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Неправильная работа одних и тех же фрагментов кода (C#):

Неправильная работа в Windows 10
Доброго времени суток! Имеется небольшая программа написанная на C#, которая...

Неправильная работа random.next()
Есть класс PersonClass отдельным файлом и есть массив Persons экземпляров этого...

Неправильная работа метода DrawPoligon
Нужно нарисовать 6-ти угольную звездочку. Её я рисую по 2 6-ти угольникам. Но у...

Неправильная работа свойств кнопок
Ребят, прописал я смену картинок при нажатии и наведении кнопок. Все вроде...

Неправильная работа клиент серверного приложения
Нашел в msdn исходники простых клиента и сервера, скомпилил в качестве...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2015, 19:12
Привет! Вот еще темы с решениями:

Неправильная работа обработчика событий кнопки в Форме
Здравствуйте, у меня возникла проблема с событием кнопки. Надо, чтобы кнопка...

Обновление одних и тех же данных в EF
Я изучаю EF и вычитал, что если 2 пользователя редактируют одни и те же данные,...

Состоят ли строки из одних и тех же символов
Здравствуйте! Вопрос в заголовке, только уточню, что количество повторов одной...

Проверить, состоят ли наборы из одних и тех же слов
6 Даны два набора по 12 слов в каждом. Проверить, состоят ли эти наборы из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru