Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
2 / 2 / 1
Регистрация: 26.02.2015
Сообщений: 25
.NET 4.x

Обратиться к CheckBox, расположенному на GroupBox

16.03.2015, 16:55. Показов 4020. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть три кнопки, три группы, в каждой из которых по три чекбокса. У чекбоксов стоит параметр Tag, причём этот параметр одинаковый у некоторых чекбоксов из разных групп. Суть в том, что при нажатии на определенную кнопку у всех чекбоксов с одинаковым Tag должна поставиться галка. Помогите пожалуйста сотворить код =)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.03.2015, 16:55
Ответы с готовыми решениями:

Обратиться к RichTextBox, расположенному на выделенной вкладке TabControl
Излагаю суть проблемы. Есть приложение в котором каждая новая форма открывается не отдельным окном, а во вкладке в общем окне. Делаю...

Как обратиться к элементу расположенному в iframe?
заранее премного благодарен ;)

Как обратиться к GroupBox в цикле ?
Здравствуйте, подскажите пожалуйста, как обратиться к группе Groupbox в цикле. Фрагмент кода, который не работает: 'обратиться к...

27
27 / 27 / 9
Регистрация: 19.08.2014
Сообщений: 77
25.03.2015, 08:22
Студворк — интернет-сервис помощи студентам
koffe09, вот, сам справился. Только один вопрос, у тебя 12 раз повторяется один и от же код для 12 групбоксов? Или я не правильно понял. Если все-таки их 12, то это надо исправлять. Допустим в событие CheckAll добавить еще один параметр: GroupBoxName as groupbox. И еще у тебя два раза повторяется:
VB.NET
1
If GroupBox1.Visible = True Then
0
2 / 2 / 1
Регистрация: 26.02.2015
Сообщений: 25
25.03.2015, 10:06  [ТС]
TigerHawk, да, Visible не заметил, удалю, спасибо)))

GroupBoxName в чистом виде не пойдёт т.к. у меня некоторые кнопки должны обрабатывать первые 6 GroupBox'ов (с 1 по 6), а некоторые вторые 6 GroupBox'ов (с 7 по 12). Мне скорее нужна группа групп - GroupGroupBoxName , потому что вызывать для каждой кнопки (а их около 70) одно и то же событие по 6 раз для разных GroupBox не резон

Я думаю мне нужно добавить по аргументу GroupBoxName As GroupBox в события CheckAll и CheckStatus, подправить и удалить повторяющиеся строки, а затем написать два события GroupGroupBoxName 1 и 2:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    Private Sub GroupGroupBoxName1(ByVal i As Integer, Optional n As Integer = 0)
       CheckStatus(GroupBox1, i, n)
       CheckStatus(GroupBox2, i, n)
       CheckStatus(GroupBox3, i, n)
       CheckStatus(GroupBox4, i, n)
       CheckStatus(GroupBox5, i, n)
       CheckStatus(GroupBox6, i, n)
    End Sub
 
    Private Sub GroupGroupBoxName2(ByVal i As Integer, Optional n As Integer = 0)
       CheckStatus(GroupBox7, i, n)
       CheckStatus(GroupBox8, i, n)
       CheckStatus(GroupBox9, i, n)
       CheckStatus(GroupBox10, i, n)
       CheckStatus(GroupBox11, i, n)
       CheckStatus(GroupBox12, i, n)
    End Sub
 
    'Вызов события по кнопке
    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        GroupGroupBoxName1(3, 4)
    End Sub
Правильно? Дома не решился на такие эксперименты, потому что приближался 5-ый час утра
0
27 / 27 / 9
Регистрация: 19.08.2014
Сообщений: 77
25.03.2015, 10:49
Подсократил чуток, убрал лишние If`ы. И два лишних события не нужны. Все можно в кнопке прописать. Через цикл, например.
VB.NET
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
Private Sub CheckStatus(ByVal GroupBoxName As GroupBox, ByVal i As Integer, Optional ByVal n As Integer = 0)
        Dim CheckedAll As Boolean = True 'Переменная отображающая статус всех чекбоксов. 
 
        If n = 0 Then n = i
 
        If GroupBoxName.Visible = True Then
            For Each c In GroupBoxName.Controls.OfType(Of CheckBox)()
                If c.Tag <= n And c.Tag >= i And c.Checked = False Then
                    CheckedAll = False 'Если чекбокс не выделен, то CheckedAll = False и выходим из цикла
                    Exit For
                End If
            Next
        End If
 
        CheckAll(GroupBoxName, Not CheckedAll, i, n)
 
    End Sub
 
    Private Sub CheckAll(ByVal GroupBoxName As GroupBox, ByVal Checked As Boolean, ByVal i As Integer, Optional ByVal n As Integer = 0)
        If n = 0 Then n = i
 
        'Ставим или снимаем галки на всех чекбоксах в зависимости от параметра Checked (True или False)
        If GroupBoxName.Visible = True Then
            For Each c In GroupBoxName.Controls.OfType(Of CheckBox)()
                If c.Tag <= n And c.Tag >= i Then
                    c.Checked = Checked
                End If
            Next
        End If
 
    End Sub
 
    Private Sub Button5_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button5.Click
        'Вызов функции. В скобках указывается имя GroupBox`а и диапазон значений Tag
        CheckStatus(GroupBox1, 3, 4)
        'Можно в ту же кнопку дописать
        CheckStatus(GroupBox2, 3, 4)
        CheckStatus(GroupBox3, 3, 4)
        CheckStatus(GroupBox4, 3, 4)
        'Или через цикл. В групбоксы так же можно Tag прописать и по нему проверять применять CheckStatus или нет.
 
    End Sub
Добавлено через 11 минут
Если внимательно посмотреть, то этот код ничего не делает:
VB.NET
1
2
3
4
5
6
7
8
9
10
 If CheckedAll1 = False And GroupBox1.Visible = True Then
            CheckedAll1 = b
            CheckAll(Not b, i, n)
            Exit Sub
        'Так для 12 CheckedAll через Else If
        Else
            b = True
            CheckAll(Not b, i, n)
            Exit Sub
        End If
Сморим код и переводим на "русский":

b ниоткуда не берется, по умолчанию False.

Если CheckedAll=False, то CheckedAll=b, то есть CheckedAll не изменился, т.к. b=False.
Иначе, то есть если CheckedAll=True присваиваем b=True.

В обоих случаях запускается одно и то же событие CheckAll(Not b, i, n). В обоих случаях b и CheckedAll равны, то есть это "Если" ничего не дает. Exit Sub ничего не дает, так как "Если" и так в конце события.

В итоге весь этот кусок заменяется на:
VB.NET
1
CheckAll(Not CheckedAll, i, n)
Ну или в обновленном варианте еще добавляется имя групбокса.
0
2 / 2 / 1
Регистрация: 26.02.2015
Сообщений: 25
25.03.2015, 17:38  [ТС]
CheckedAll(от 1 до 12) As Boolean, которые я объявил, но здесь забыл написать об этом, хранят в себе информацию ставить групбоксу галки или снимать. Да, на первый взгляд это условие ничего не делает, но это не так. На практике с помощью него если не заполнен хотя бы один чекбокс у одного групбокса (допустим 2) и я нажму кнопку, то все чекбоксы всех групбоксов станут True. Если я нажму кнопку без этого условия, то у GroupBox2 все чекбоксы станут True, а вот те групбоксы, у которых уже были все True, станут False. Иначе говоря, этим условием я задаю, что если хоть у одной группы есть хотя бы один чекбокс False, то всем чекбоксам (разумеется с нужным нам значением Tag) всех групбоксов нужно сделать True
0
27 / 27 / 9
Регистрация: 19.08.2014
Сообщений: 77
25.03.2015, 23:07
Мне стало интересно, а что в итоге делает эта программа?
0
2 / 2 / 1
Регистрация: 26.02.2015
Сообщений: 25
26.03.2015, 01:08  [ТС]
Я короче решил всё вернуть как было (но с апдейтом и сокращением некоторых строк) т.к. всё правильно работает лишь тогда, когда все группы групп написаны в одном событии.

Вообще вся программа - это электронная регистрация материала для обследования с вводом результатов исследования, а затем автоматическим созданием бланков для каждого пациента. То, что я мучаю в этой теме - это окно выбора инфекций на для материала

На скрине сверху и посередине видно кучу кнопок с подпунктами разных инфекций. Т.к. их много, они не умещаются в одну строку и пришлось переносить вниз. Слева столбик кнопок с названием материала. Напротив каждой кнопки длиииинный GroupBox.

Теперь осталось придумать как значения чекбоксов заносить а базу данных access. Наверно тоже по тегам и через контрол
Миниатюры
Обратиться к CheckBox, расположенному на GroupBox  
0
27 / 27 / 9
Регистрация: 19.08.2014
Сообщений: 77
26.03.2015, 08:40
Шапка каждого блока с чекбоксами это все кнопки? Сложно. Желаю успехов!
0
2 / 2 / 1
Регистрация: 26.02.2015
Сообщений: 25
26.03.2015, 09:04  [ТС]
Спасибо)
Да, это кнопки. Сначала хотел таблицей сделать, но VB net не может такую создать. Текстбоксами сделал, потом заменил на кнопки и добавил функциональности. 240 с чем то чекбоксов вручную проставлять заколебешься. А тут нажал пару удобных кнопок и все готово)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.03.2015, 09:04

GroupBox и CheckBox
хочу сделать так чтобы CheckBox которые были помещенны в GroupBox, не могли выбираться больше двух. То есть, по нажатию на кнопку...

Поиск CheckBox в GroupBox
Здравствуйте!!! Ребята подскажите как правильно. Мне нужно просканировать 13 чекбоксов в групбоксе на предмет установления галочек и...

Groupbox, Checkbox, Radiobutton
Добрый вечер. Заранее извиняюсь за глупые вопросы, я только в начале пути. Нужно сделать простую программку, в которой выбираются пункты и...

Обратиться к нескольким TextBox, принадлежащим одному GroupBox
Здравствуйте, уважаемые форумчане!!!! Помогите пожалуйста с задачкой: На форме есть группбоксы. В них есть текстбоксы. Группбоксы и...

Круглый checkBox в заголовке groupBox
Добрый день, Заголовок groupBox можно сделать с checkBox-ом, а как этот checkBox сделать круглым как radioButton??? он мне по стилю не...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru