Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для Волшебник 307
1396 / 331 / 45
Регистрация: 16.04.2013
Сообщений: 786
Записей в блоге: 2

Как удалить ВСЕ лабелы одним нажатием?

13.06.2023, 22:53. Показов 1154. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как удалить ВСЕ лабелы одним нажатием?
---
На форме Кнопка, при загрузке создаю 20 лабелов.
По нажатию на кнопку хочу их ВСЕ удалить.

Почему лабелы удаляются через раз? не пойму.
---
Использую этот код.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim i1 As Integer
        Dim y1 As Integer = 21
 
        For i1 = 0 To 20
            Me.Controls.Add(New Label With {.Name = "N" & i1, .Location = New Point(4, y1), .AutoSize = True, .Tag = "0", .Text = i1})
            y1 += 21
        Next
 
    End Sub
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        For Each ctl As Control In Controls
            Select Case ctl.Tag
                Case "0" : ctl.Dispose() ' : MsgBox(ctl.Tag)
            End Select
        Next
    End Sub
Миниатюры
Как удалить ВСЕ лабелы одним нажатием?   Как удалить ВСЕ лабелы одним нажатием?   Как удалить ВСЕ лабелы одним нажатием?  

Как удалить ВСЕ лабелы одним нажатием?   Как удалить ВСЕ лабелы одним нажатием?  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.06.2023, 22:53
Ответы с готовыми решениями:

Множественный выбор и одним нажатием на кнопку submit обновить все (или только измененные) checkboxы в БД
Посоветуйте пожалуйста как сделать следующее: существует 50 записей (типа checkbox) в таблице в БД выводим все данные из таблицы ...

Как в Excel в ячейках все что равно =0 автоматом или одним нажатием заменить на слова
В ячейках есть слова принято 0, принято 1 и так далее, там где принято 0 все заменить на ''не приняты'' Таблица большая с...

Как нажатием кнопки удалить все фильтры?
как нажатием кнопки удалить все фильтры

18
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
13.06.2023, 23:08
Лучший ответ Сообщение было отмечено Волшебник 307 как решение

Решение

Волшебник 307, попробуйте так
VB.NET
1
2
3
4
5
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For i = Controls.Count - 1 To 0 Step -1
        If Controls(i).Tag = "0" Then Controls(i).Dispose()
    Next
End Sub
1
 Аватар для Sklifosofsky
1086 / 916 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
13.06.2023, 23:21
Лучший ответ Сообщение было отмечено Волшебник 307 как решение

Решение

Если кому интересно от куда лапы растут ...
https://stackoverflow.com/ques... nexception

Добавлено через 5 минут
5 коп.
VB.NET
1
Me.Controls.OfType(Of Label).Where(Function(x) x.Tag = "0").ToList().ForEach(Sub(x) x.Dispose())
2
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
14.06.2023, 09:04
Цитата Сообщение от Волшебник 307 Посмотреть сообщение
Me.Controls.Add
Лучше добавьте рамку GroupBox или панель Panel, когда надо добавить — добавляйте в рамку GroupBox1.Controls.Add()
когда надо очистить — делайте всего один вызов GroupBox1.Controls.Clear().
1
Модератор
Эксперт .NET
 Аватар для Yury Komar
4360 / 3430 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
15.06.2023, 07:34
Волшебник 307, назрел вопрос - а зачем столько лэйбочек на одной форме да еще и в столбик? Может одну добавить и в ней текст построчно разбить?
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
15.06.2023, 08:25
А может там вообще не нужны никакие Label, а будет достаточно простого списка.
0
dive
 Аватар для I can
4964 / 4662 / 845
Регистрация: 13.04.2015
Сообщений: 9,861
15.06.2023, 09:21
Цитата Сообщение от Замабувараев Посмотреть сообщение
когда надо добавить — добавляйте в рамку GroupBox1.Controls.Add()
когда надо очистить — делайте всего один вызов GroupBox1.Controls.Clear().
Очень хреновый совет. Сначала начинает течь память, так как объекты не диспозятся, но можно понадеяться на сборщик мусора, а потом программа крашится с ошибкой HResult=0x80004005 (Ошибка при создании дескриптора окна.)
0
2288 / 1604 / 400
Регистрация: 26.06.2017
Сообщений: 4,757
Записей в блоге: 1
17.06.2023, 07:30
I can, GC на то и создан был, чтобы разработчик не сильно заботился об освобождении памяти. А про ошибку откуда инфа?
В данном конкретном случае этот совет будет наилучшим.

P.S. Что-то я сильно сильно не уверен, что при работе всего 20 меток возникают проблемы.
0
dive
 Аватар для I can
4964 / 4662 / 845
Регистрация: 13.04.2015
Сообщений: 9,861
17.06.2023, 07:48
Цитата Сообщение от Uswer Посмотреть сообщение
А про ошибку откуда инфа?
Наступал уже на грабли с этим Clear.
Цитата Сообщение от Uswer Посмотреть сообщение
что при работе всего 20 меток возникают проблемы
Нет, крах наступает если периодически создавать элементы, а потом очищать панель с помощью Clear.
Происходит это примерно на 10000 элементе. При постоянной работе приложения это немного.
Если же делать с помощью Dispose, то всё работает чётко.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
17.06.2023, 08:29
Цитата Сообщение от I can Посмотреть сообщение
Сначала начинает течь память, так как объекты не диспозятся
Совершенно не согласен. Уничтожением объектов должен заниматься сборщик мусора.
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18307 / 14231 / 5368
Регистрация: 17.03.2014
Сообщений: 28,904
Записей в блоге: 1
17.06.2023, 09:51
Цитата Сообщение от Замабувараев Посмотреть сообщение
Совершенно не согласен. Уничтожением объектов должен заниматься сборщик мусора.
Странно такое слышать от опытного программиста. Утечка дескрипторов, о которой говорит I can, реальная проблема. В данной ситуации сборщику мусора не помешает помочь. Вызов Dispose() освободит дескриптор сразу же как он перестал быть нужен, а далее сборщик мусора освободит память в удобный момент.
0
2288 / 1604 / 400
Регистрация: 26.06.2017
Сообщений: 4,757
Записей в блоге: 1
17.06.2023, 23:41
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Утечка дескрипторов реальная проблема.
Крах всего учения о высокоуровневом программировании под .Net.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18307 / 14231 / 5368
Регистрация: 17.03.2014
Сообщений: 28,904
Записей в блоге: 1
17.06.2023, 23:45
Uswer, в чем крах? Можно подумать вы в первый раз услышали про Dispose и что CLR/GC отвечают только за управляемые ресурсы.
0
2288 / 1604 / 400
Регистрация: 26.06.2017
Сообщений: 4,757
Записей в блоге: 1
17.06.2023, 23:57
Крах в том, что оказывается метод Clear контрола приводит к утечке дескрипторов. А в контексте вопроса метки всё таки управляемый ресурс, вот и возникает диссонанс в сознании. А вообще проектировать приложение следует так чтобы не требовалось создавать элементы управления по 100500 раз.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18307 / 14231 / 5368
Регистрация: 17.03.2014
Сообщений: 28,904
Записей в блоге: 1
18.06.2023, 11:15
Uswer, неприятный сюрприз, понимаю, но Clear делает ровно то что должен делать - очищает коллекцию элементов управления. Он не вызывает Dispose() потому, что удаление элементов управления не означает (в общем случае) что ими уже больше не будут пользоваться. Возможно они будут добавлены в другой контейнер.

Цитата Сообщение от Uswer Посмотреть сообщение
А в контексте вопроса метки всё таки управляемый ресурс
FileStream, SqlConnection тоже управляемые ресурсы ... за которым стоит неуправляемый. Нужно знать о таких ситуациях.
2
2288 / 1604 / 400
Регистрация: 26.06.2017
Сообщений: 4,757
Записей в блоге: 1
18.06.2023, 17:53
В качестве финальной точки думаю такой вариант должен удовлетворить всех
VB.NET
1
2
3
4
5
6
7
8
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  For i As Integer = Controls.Count - 1 To 0 Step -1
    Dim cntrl As Control = Controls(i)
    If (TypeOf cntrl Is Label) AndAlso (cntrl.Tag = "0") Then
      Controls.Remove(cntrl)
    End If
  Next i
End Sub
Dispose остаётся на совести GC.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18307 / 14231 / 5368
Регистрация: 17.03.2014
Сообщений: 28,904
Записей в блоге: 1
18.06.2023, 18:50
Цитата Сообщение от Uswer Посмотреть сообщение
Dispose остаётся на совести GC.
Вот только GC не вызывает Dispose. Так трудно добавить еще одну строку?
0
2288 / 1604 / 400
Регистрация: 26.06.2017
Сообщений: 4,757
Записей в блоге: 1
18.06.2023, 19:36
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Вот только GC не вызывает Dispose
GC вызывает Finalize, в который компилятор оборачивает инструкции из Dispose. Так или иначе, но GC прибьёт метки, да не сразу, но гарантированно прибьёт. Так как у ТС-а единственное место куда у метки можно засунуть неуправляемые ресурсы занято (.Tag = "0"), то беспокоиться не о чем.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18307 / 14231 / 5368
Регистрация: 17.03.2014
Сообщений: 28,904
Записей в блоге: 1
18.06.2023, 19:51
Цитата Сообщение от Uswer Посмотреть сообщение
GC вызывает Finalize
Да. И необходимость такого вызова продлевает время жизни нашей метки, без реальной на то необходимости, повышая вероятность того что приложение упрется в ограничение на количество дескрипторов.

Цитата Сообщение от Uswer Посмотреть сообщение
Finalize, в который компилятор оборачивает инструкции из Dispose.
Компилятор ничего такого не делает.

Цитата Сообщение от Uswer Посмотреть сообщение
Так как у ТС-а единственное место куда у метки можно засунуть неуправляемые ресурсы занято (.Tag = "0"), то беспокоиться не о чем.
Вы похоже не поняли о чем тут речь. У каждого элемента управления есть свойство Handle. Это т.н. дескриптор которым владеет ОС. Если элемент управления больше не нужен, то дескриптор нужно освободить вызвав Dispose(). То что записано в свойстве Tag это уже полностью забота программиста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.06.2023, 19:51
Помогаю со студенческими работами здесь

Выделить все checkbox одним нажатием кнопки (или чекбоксом)
Добрый день!Мне нужен код на VBS с помощью которого, при активации чекбокса"Выделить все" выделялась группа чекбоксов. В интернете...

как послать 2 формы одним нажатием на клавишу?
как послать 2 формы одним нажатием на клавишу? в одной форме текстовые поля, в другой прикрепленный файл. выглядет так: ...

Как уничтожить несколько одинаковых объектов на сцене одним нажатием на кнопку?
Постоянно на сцене генерируются одинаковые объекты. При нажатии на кнопку нужно, чтобы (1)они все уничтожались/либо (2)уничтожалось...

Как текущую форму перевести в отчет, и распечатать одним нажатием кнопки
Пожалуйста помогите. Есть форма, нужно перенести текущий данные формы в отчет по шаблону и распечатать одним нажатием кнопки. Огромное...

Код, перебирающий все лабелы на определенной странице multipage
Нужно пустые лабелы скрыть, а заполненные оставить. нарисовал такую конструкцию For Each i In...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru