Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
 Аватар для urman
7 / 7 / 0
Регистрация: 10.04.2015
Сообщений: 282

Групповое изменение свойств объектов

15.04.2018, 04:22. Показов 4625. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
существует ли возможность группового изменения свойств однотипных объектов примерно таким образом:
Visual Basic
1
2
3
With Надпись1,Надпись2,Надпись3, и т.д.
.Visible = True
End With
Если это не возможно то как это делается в принципе?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.04.2018, 04:22
Ответы с готовыми решениями:

Групповое изменение свойства объектов?
Здравствуйте! Возникла следующая необходимость: Для группы объектов, например TextBox, присутствующих на одной форме изменить .Locked =...

Изменение свойств группы объектов
Добрый день! Есть ComboBox со значением от 1 до 10, а также 10 строк из одного Lable и девяти Textbox каждая (изначально невидимые). ...

Установка свойств объектов с оператором with и без него
Всем привет! Наткнулся как то раз на интересный момент при работе с объектами. В тот момент не было времени разбираться, но сейчас вот...

18
Заблокирован
15.04.2018, 07:54
urman, это смотря что за объекты?
Например так -
Visual Basic
1
2
3
4
5
Private Sub CommandButton1_Click()
For i = 1 To 3
  Controls("Надпись" & i).Visible = Not Controls("Надпись" & i).Visible
Next
End Sub
1
 Аватар для urman
7 / 7 / 0
Регистрация: 10.04.2015
Сообщений: 282
15.04.2018, 10:38  [ТС]
Цитата Сообщение от Остап Бонд Посмотреть сообщение
Private Sub CommandButton1_Click()
For i = 1 To 3
* Controls("Надпись" & i).Visible = Not Controls("Надпись" & i).Visible
Next
End Sub
А как это работает? применяется для всех надписей на форме? c with не возможно сделать перечисление объектов?
в случае с Надпись1,Надпись2,Надпись3, как применить код выше?
0
 Аватар для Святой НякаЛайк
655 / 247 / 89
Регистрация: 28.10.2015
Сообщений: 526
15.04.2018, 12:50
юзайте For each
1
 Аватар для Святой НякаЛайк
655 / 247 / 89
Регистрация: 28.10.2015
Сообщений: 526
15.04.2018, 13:00
1
 Аватар для Святой НякаЛайк
655 / 247 / 89
Регистрация: 28.10.2015
Сообщений: 526
15.04.2018, 13:15
В вашем случае будет примерно так:
Visual Basic
1
2
3
4
5
Private Sub CommandButton1_Click()
    For Each c In Controls
        If TypeName(c) = "Label" Then c.Visible = False
    Next
End Sub
Данный код пройдётся по всем элементам и сделает невидимыми все надписи.
Если форма с вкладками или группами, можете прописать For Each в пределах одной вкладки:
Visual Basic
1
2
3
4
5
6
7
Private Sub CommandButton1_Click()
    With MultiPage1.Pages(0)
        For Each c In .Controls
            If TypeName(c) = "Label" Then c.Visible = False
        Next
    End With
End Sub
Выглядит так:
1
 Аватар для Святой НякаЛайк
655 / 247 / 89
Регистрация: 28.10.2015
Сообщений: 526
15.04.2018, 13:17
Также копайте в сторону использования Классов. Штука весьма крутая и очень спасает именно в таких задачах с кучей элементов управления и групповой работой с ними!
1
 Аватар для urman
7 / 7 / 0
Регистрация: 10.04.2015
Сообщений: 282
15.04.2018, 17:27  [ТС]
Цитата Сообщение от Святой НякаЛайк Посмотреть сообщение
Данный код пройдётся по всем элементам и сделает невидимыми все надписи.
Если форма с вкладками или группами, можете прописать For Each в пределах одной вкладки:
Я так понимаю что код применим ко всем надписям, а если мне необходимо не все, а какие то определенные?
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,937
Записей в блоге: 4
15.04.2018, 18:13
Цитата Сообщение от urman Посмотреть сообщение
Я так понимаю что код применим ко всем надписям, а если мне необходимо не все, а какие то определенные?
опишите тогда Правило отбора надписей
0
 Аватар для urman
7 / 7 / 0
Регистрация: 10.04.2015
Сообщений: 282
15.04.2018, 18:49  [ТС]
Цитата Сообщение от shanemac51 Посмотреть сообщение
опишите тогда Правило отбора надписей
Так я и спрашиваю как это делается?
0
 Аватар для Святой НякаЛайк
655 / 247 / 89
Регистрация: 28.10.2015
Сообщений: 526
15.04.2018, 19:01
Лучший ответ Сообщение было отмечено urman как решение

Решение

Так определите их!
Visual Basic
1
If TypeName(c) = "Label" Then c.Visible = False
здесь прописано условие, согласно которому отбираются все элементы управления, имя типа которых равняется "Label"
Вам ничто не мешает сюда же прописать любое другое условие отбора
Visual Basic
1
If TypeName(c) = "Label" and c. top < 1000 Then c.Visible = False '(отбираются все лабелы, расположенние в верхей части формы)
Visual Basic
1
If TypeName(c) = "Label" and c.caption like "Надпись" Then c.Visible = False '(отбираются все, содержащие текст "Надпись")
... И так далее, любое условие под ваши нужды.
Другой вариант: для начала создайте коллекцию элементов управления, туда прямо впишите нужные вам конкретные элементы, а потом их можно обрабатывать как группу.
Visual Basic
1
2
3
    Dim col As New Collection
    col.Add Label1
    col.Add Label3
Вот пример создания коллекции и добавления в неё двух конкретных надписей.
После чего в любой миг можно сделать так
Visual Basic
1
2
3
For each h in col
h.visible = false
next
1
 Аватар для urman
7 / 7 / 0
Регистрация: 10.04.2015
Сообщений: 282
16.04.2018, 02:46  [ТС]
Цитата Сообщение от Святой НякаЛайк Посмотреть сообщение
Visual Basic
1
2
3
For each h in col
h.visible = false
next
Спасибо только вот здесь не совсем понятно что означает "h"
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,671
16.04.2018, 03:11
h - это объект в коллекции объектов

Добавлено через 2 минуты
чуть выше Святой НякаЛайк, дал вам код как создать коллекцию объектов
а этот код как ей уже пользоваться в вашей ситуации
0
 Аватар для urman
7 / 7 / 0
Регистрация: 10.04.2015
Сообщений: 282
16.04.2018, 06:23  [ТС]
Цитата Сообщение от snipe Посмотреть сообщение
h - это объект в коллекции объектов
а почему именно h? можно использовать любую букву?
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,671
16.04.2018, 07:49
это переменная в данном случае тип Object
как вы ее обзовете - ваше дело
1
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
16.04.2018, 10:22
как вариант можно расположить группы контролов на фреймы. И скрывать фреймы
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,937
Записей в блоге: 4
16.04.2018, 12:15
Данный код пройдётся по всем элементам и сделает невидимыми все надписи.
зачем это требуется, чем определяется выбор --например требуется скрыть кнопки в зависимости от того, кто авторизовался
0
 Аватар для Святой НякаЛайк
655 / 247 / 89
Регистрация: 28.10.2015
Сообщений: 526
16.04.2018, 12:35
Это неявное объявление переменной.
Как вы объявляете переменные?
Пишете, например "Dim h as Object"
Это пример явного объявления, а есть неявное, например безо всякого "Dim" сразу пишете "For Each h"
Почему именно Hи можно ли использовать любую букву? h просто в голову взбрело, потому что можно использовать любую, кроме тех, которые используются для других целей и кроме тех, которые вам явно запретит использовать бейсик.
Например, попробуете написать "Dim sub as integer" и получите ошибку, потому что слово sub использовать в коде нельзя.
Также нельзя использовать такие имена, как "Dim 123j as Long", потому что имя переменной не может начинаться с цифры.
Вот примеры неявного объявления:
Visual Basic
1
2
3
Sub h()
host = 120
End Sub
В данном случае создается переменная host, изначально имеет тип Variant, но когда выполнится код "host = 120", переменная уже становится Integer.

Сделайте одолжение, скопируйте этот код:
Visual Basic
1
2
3
Sub h()
host = 120
End Sub
Вставьте его в модуль листа в вашем бейсике и нажмите клавишу F8. Но прежде всего проследите, чтобы было включено окошко переменных (Меню View -> Locals Window). Когда будет включено окошко Locals, нажимайте клавишу F8 и наблюдайте, что происходит в окне локалс. Вы будете наблюдать пошаговое выполнение программы.
Потом тем же образом выполните свои процедуры. Внутренняя механика, как всё происходит, что можно и что нельзя и очень многие "Почему так?" и многие "А как можно?" у вас улягутся сами собой.

Добавлено через 8 минут
Предпочитайте использовать явное объявление переменных. Так самому для себя понятнее и эта стратегия избавит от ошибок, если не включен Option Explicit. Кроме того, желательно объявлять переменные явно, сразу определяя их тип "Dim l as long, b as byte, st as string"
Есть опытные люди, для которых всё вышеупомянутое просто неважно, так как они чувствуют себя в коде как рыба в воде, аесли опыта мало, желательно и Option Explicit включить и переменные явно объявлять и их тип сразу указывать. Избавит от бездны ситуаций типа "Вродь всё правильно, но не работает".
1
 Аватар для urman
7 / 7 / 0
Регистрация: 10.04.2015
Сообщений: 282
16.04.2018, 16:06  [ТС]
Спасибо большое за такой подробный ответ! многое стало понятно!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.04.2018, 16:06
Помогаю со студенческими работами здесь

Изменение свойств картинки
Доброго времени суток. Хочу задать вопрос специалистам по ВБА. Использую следующий макрос для наложения художественного эффекта на...

Изменение свойств кнопок в цикле
Доброго времени суток. Столкнулся с такой проблемой. Есть форма на которой около 400 кнопок. При нажатии на управляющие кнопки, группы по...

Изменение свойств нескольких TextBox циклом
Добрый день! Проблема у меня в следующем: на форме есть несколько TextBox-ов из которых значение присваивается переменным (при...

PowerPoint VBA Изменение свойств слайдов
Всем привет! Есть задача которую не могу решить(( информации по работе с VBA PowerPoint практически нет(( Плизз помогите! Задача...

Изменение свойств источника данных запроса в Excell
Доброе время суток! Возникла проблеммка! Может кто-нить знает как сделать сабж при выгрузке данных из БД. Конкретнее: в Excell'е...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru