Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 01.07.2019
Сообщений: 59
Excel

Программное удаление контролов

15.07.2019, 14:48. Показов 3169. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
попробовал так: при инициализации формы создается контролс "TextLabel", после, перед изменением индекса TabStrip1 поставил строчку UserForm2.Controls.Remove ("TextLabel"), бейсик ее пропускает но не реагирует (то есть не чистит созданные лебел с формы). при изменении индекса TabStrip1 у меня каждый раз плодятся контролы друг на друга и грузят так систему. Подскажите что не так?


Visual Basic
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
Private Sub UserForm_Initialize()
 
X = 95
For i = 1 To 19
l = 77
c = 0
For a = 4 To 65
  With Controls.Add("Forms.Label.1")
        .Name = "TextLabel"
        .Width = 10
        .Height = 10
        .Font.Size = 5
        .Left = l + c
        .Top = X
        .Caption = ThisWorkbook.Sheets(19 + UserForm2.TabStrip1.Value).Cells(7 + i, a + 1)
        .Font.Bold = True
        .SpecialEffect = 3
  End With
c = c + 11
Next
X = X + 10
Next
 
End Sub
 
 
Private Sub TabStrip1_Change()
 
UserForm2.Controls.Remove ("TextLabel")
 
X = 95
 
For i = 1 To 19
l = 77
c = 0
For a = 4 To 65
  With Controls.Add("Forms.Label.1")
        .Name = "TextLabel"
        .Width = 10
        .Height = 10
        .Font.Size = 5
        .Left = l + c
        .Top = X
        .Caption = ThisWorkbook.Sheets(19 + UserForm2.TabStrip1.Value).Cells(7 + i, a + 1)
        .Font.Bold = True
        .SpecialEffect = 3
  End With
c = c + 11
Next
X = X + 10
Next
 
 
End Sub
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.07.2019, 14:48
Ответы с готовыми решениями:

Программное создание и получение событий от любых создаваемых контролов
Люди интересная задача, просмотрел по форуму есть 2 или 3 топика по этому вопросу, но приведены частные решения только для определенных...

Программное удаление фигур
Здравствуйте! Существует проблема: на листе начерчено много линий. надо программно их всех(!!!) удалить. Как это...

Программное удаление нескольких картинок
Всем привет, дорогие товарищи! В excel-е программно рисую 4 картинки с графиками, а затем их надо удалить. Вопрос - как это...

6
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
15.07.2019, 15:28
А зачем столько контролов?
не проще один какой-нибудь грид
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
15.07.2019, 18:54
Цитата Сообщение от Шарпей Посмотреть сообщение
бейсик ее пропускает но не реагирует (то есть не чистит созданные лебел с формы)
Вы заблуждаетесь, не пропускает, а выполняет и удаляет самый первый контрол с указанным именем. Соответственно, если хотите удалить все контролы, то просто используйте цикл.
0
0 / 0 / 0
Регистрация: 01.07.2019
Сообщений: 59
16.07.2019, 09:24  [ТС]
одним блоком ? интересно попробовать, только как ?
но все же... при инициализации группы формируются контролы, вот как их чистить? наслоение идет.

Добавлено через 5 минут
все одно идет наслоение, при изменении индекса TabStrip1 одно на одно накладывается. это видно на форме.
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
16.07.2019, 10:21
Шарпей, Вы сейчас с кем разговаривали ? Если со мной, то повторюсь, чтобы очистить все созданные контролы можно использовать цикл, например

Visual Basic
1
2
3
for a = 4 to 65
     controls.remove "textlabel"
next
1
0 / 0 / 0
Регистрация: 01.07.2019
Сообщений: 59
16.07.2019, 10:38  [ТС]
Я понял, получается у меня элиментов 61 * 19 = 1159; командой Forma.Controls.Remove ("TextLabel") я удаляю только один элимент, я думал есть команда по удалению контрола с именем .Name = "TextLabel"

Добавлено через 7 минут
Visual Basic
1
2
3
4
E = i * (a - 4)
For b = 1 To E
Controls.Remove "textlabel"
Next
Я вот так сделал .... Спасибо ...
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
16.07.2019, 18:25
Шарпей, Если хотите удалять все созданные контролы одной строкой, то можно сделать такой финт. Сначала создать фрейм, затем на нём расположить все нужные/ненужные контролы, а затем, просто удалять этот фрейм. Если заголовок и граница не нужны, то их можно убрать (см.код)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub CommandButton1_Click() 'Создание
    Dim cf As MSForms.Frame, i&
    Set cf = Controls.Add("Forms.Frame.1", "vbaFrame")
    cf.Caption = ""
    'cf.BorderStyle = fmBorderStyleNone
    cf.SpecialEffect = fmSpecialEffectFlat
    For i = 0 To 4
        With cf.Controls.Add("Forms.Label.1")
             .Width = 10
             .Height = 10
             .Left = i * 11
             .Caption = ""
             .SpecialEffect = fmSpecialEffectEtched
        End With
    Next
End Sub
 
Private Sub CommandButton2_Click() 'Удаление
    Controls.Remove "vbaFrame"
End Sub
P.S. Ширина, высота, месторасположение и прочее, не имеют значения, т.к. используются только для наглядности.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.07.2019, 18:25
Помогаю со студенческими работами здесь

Программное удаление функций текущей книги в Excell
Нельзя ли в Екселе программно удалить функции ТекущейКниги? Очень не хочется чтобы после обработки книги там лазили пользователи.

Программное создание контролов и работа с ними
Проблема такая: контролы создаются программно при выполнении функции "treeView1_AfterSelect". Обращение к этим контролам из других...

Программное переключение уровней (SendToBack, ToFront) контролов.
Как программно осуществить Send To Back, Send To Front? Заранее спасибо.

Удаление контролов
На форме есть пэнэл с контролами. Подскажите как правильно динамически его удалять. Сначала удалить все контролы на нем а потом только...

Удаление динамических контролов
В класе описана кнопка котороая создайот динамически кнопку і текстБокс. кнпока которая создайотся динамически должна удалять і саму себя і...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru