1 / 1 / 1
Регистрация: 13.10.2012
Сообщений: 28
1

Взаемодействие 3х NumericUpDown

30.06.2015, 17:57. Показов 968. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Имею проблему создания кода для обработки трех NumericUpDown элементов, точнее для их взаимодействия.
Есть три элемента: ОБЩЕЕ КОЛИЧЕСТВО документов, количество документов, которые прошли без ошибок и количество документов, которые прошли с ошибками.
Кроме того, есть два элемента чекбоксах, которые позволяют автоматически выставить, что все документы являются корректные или нет.

Кликните здесь для просмотра всего текста
Взаемодействие 3х NumericUpDown


Как оно должно работать:
1) вводим общее количество документов, например 10
1.1) если есть галочка "все документы пройдены", то их количество автоматически тоже стала 10, соответственно некорректных тогда ноль.
2) Например мы добавили, что некорректных документов было 2. Тогда автоматически галочки (all) убираются и цифри должны быть такие: всех 10, некорректных 2, корректных 8.
3) Например мы увеличили вручную количество некорректных до 10 и галочка (all) автоматически устанавливается (потому что всех тоже было 10).
4) Например мы увеличиваем количество некорректных вручную до 20 и количество ОБЩИХ автоматически становится тоже 20 (количество корректных пока ноль).
5) Опять начали менять количество корректных, например ставим 5, тогда всех 20 корректных 5, некорректных 15, а в чекбоксах галки снялись автоматически.

Проблема в этом месте у меня возникла такая, что когда я вызываю код изменения одного NumericUpDown, изменяется значение другого, которое автоматически запускает событие изменения значения NumericUpDown, в котором исчисляется другое значение и запускает автоматическую замену в другом хэндлере.

Кусок кода
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
 CheckBox lastChecked;
//обработка чекбоксов (чтоб только один мог быть активным.
        private void ckb_Click(object sender, EventArgs e)
        {
           CheckBox activeCheckBox = sender as CheckBox;
           if(activeCheckBox != lastChecked && lastChecked!=null) lastChecked.Checked = false;
           lastChecked = activeCheckBox.Checked ? activeCheckBox : null;
           
           
           if(checkBox8.Checked)
           {
                DocumentsPass.Value = DocumentsSent.Value;
                DocumentsStop.Value = 0;
           }
            
           if(checkBox14.Checked)
           {
                DocumentsPass.Value = 0;
                DocumentsStop.Value = DocumentsSent.Value;
           }
            
        }
 
//обработка для числа общих документом
      private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            if(checkBox8.Checked)
            {
                DocumentsPass.Value = DocumentsSent.Value;
                DocumentsStop.Value = 0;
            }
            
            if(checkBox14.Checked){
                DocumentsStop.Value = DocumentsSent.Value;
                DocumentsPass.Value = 0;
            }
        }
 
 
//обработка провальных документов
        void DocumentsStopValueChanged(object sender, EventArgs e)
        {
            if(DocumentsStop.Value < DocumentsSent.Value)
                DocumentsPass.Value = DocumentsSent.Value - DocumentsStop.Value; 
            else 
            {
                DocumentsSent.Value = DocumentsStop.Value;
                DocumentsPass.Value = 0;
            }
            CheckIsItMaximum();
        }
        
 
//обработка корректных документов
        void DocumentsPassValueChanged(object sender, EventArgs e)
        {
            if(DocumentsPass.Value < DocumentsSent.Value)
                DocumentsStop.Value = DocumentsSent.Value - DocumentsPass.Value; 
            else 
            {
                DocumentsSent.Value = DocumentsPass.Value;
                DocumentsStop.Value = 0;
            }   
            CheckIsItMaximum();
        }
 
 
 
//функция проверки типа "если одно число есть максимум - ставим галочку"
private void CheckNumbers()
        {
            if (DocumentsPass.Value != DocumentsSent.Value)
                checkBox8.Checked = false;
            if(DocumentsPass.Value == DocumentsSent.Value)
                checkBox8.Checked=true;
                
             if (DocumentsStop.Value != DocumentsSent.Value)
                checkBox14.Checked = false;
            if(DocumentsStop.Value == DocumentsSent.Value)
                checkBox14.Checked=true;
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2015, 17:57
Ответы с готовыми решениями:

numericUpDown
На форме есть 2 numericUpDown (nud). Первый отвечает за задание часов (nudH), второй - за задание...

numericUpDown
timer1.Interval= Convert.ToString(numericUpDown1.Value); получает все время одно одинаковое...

NumericUpDown и Decimal
как в numericUpDown сделать так что бы можно видеть числа с точкой? и работать. Отображает только...

Задача с NumericUpDown
Нужно ввести число, возвести его в степень при помощи NumericUpDown, использовать при этом...

1
2079 / 1237 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
05.07.2015, 20:56 2
Нумерацию контролов оставил свою (и те, и другие - по возрастанию, сверху вниз)
Кликните здесь для просмотра всего текста
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
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked == true)
            {
                numericUpDown2.Value = numericUpDown1.Value;
                numericUpDown3.Value = 0;
                checkBox2.Checked = false;
            }
        }
 
        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox2.Checked == true)
            {
                numericUpDown3.Value = numericUpDown1.Value;
                numericUpDown2.Value = 0;
                checkBox1.Checked = false;
            }
        }
 
        private void numericUpDown2_ValueChanged(object sender, EventArgs e)
        {
            if (numericUpDown1.Value != numericUpDown2.Value + numericUpDown3.Value)
            {
                numericUpDown3.Value = numericUpDown1.Value - numericUpDown2.Value;
                checkBox2.Checked = false;
                checkBox1.Checked = false;
            }
            if (numericUpDown1.Value == numericUpDown2.Value)
                checkBox1.Checked = true;
            if (numericUpDown1.Value == numericUpDown3.Value)
                checkBox2.Checked = true;
        }
 
        private void numericUpDown3_ValueChanged(object sender, EventArgs e)
        {
            if (numericUpDown2.Value == 0 && numericUpDown3.Value > numericUpDown1.Value)
                numericUpDown1.Value = numericUpDown3.Value;            
            if (numericUpDown1.Value != numericUpDown2.Value + numericUpDown3.Value)
            {
                numericUpDown2.Value = numericUpDown1.Value - numericUpDown3.Value;
                checkBox1.Checked = false;
                checkBox2.Checked = false;
            }
            if (numericUpDown1.Value == numericUpDown3.Value)
                checkBox2.Checked = true;
            if (numericUpDown1.Value == numericUpDown2.Value)
                checkBox1.Checked = true;
        }
Миниатюры
Взаемодействие 3х NumericUpDown  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2015, 20:56
Помогаю со студенческими работами здесь

NumericUpDown в DataGridView
Уважаемые гуру, помогите с настройкой DataGridView Есть DataTable c двумя столбцами: 1) &quot;Figures&quot;...

Проблема с NumericUpDown
Доброго времени суток! Столкнулся с такой проблемой, я нажимаю на Checkbox, вся строчка становится...

Найти NumericUpDown
Каким образом найти на чужой форме NumericUpDown контрол? Вот этот код у меня не работает:...

С++ Form NumericUpDown
Задача такая Если нажата кнопка вверх сделать одно если нажата кнопка вниз сделать другое. Нужно...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru