Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

22 Май 2022, 14:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Обработка группы элементов диалога  (Прочитано 334 раз)
0 Пользователей и 1 Гость смотрят эту тему.
siti
Участник
**
Offline Offline

Сообщений: 44


« Стартовое сообщение: 21 Апрель 2022, 08:27 »

Подскажите как можно массово опросить или изменить значения однотипных элементов диалога. Например есть 12 элементов с именами CheckBox1...CheckBox12.
Можно ли разом изменить или опросить их статус в цикле или еще как то?
Записан
eeigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 1 088


« Ответ #1: 21 Апрель 2022, 08:41 »

Да. Вы можете в цикле по всем элементам управления проверить тип элемента управления (oControl.ClassId). Или задать им метку (текст) в свойстве  "Дополнительная информация" – прямо в окне диалога – и при обходе проверить значение свойства oControl.Model.Tag. Можно анализировать и имя, но оно, как правило, должно быть осмысленным.

При этом надо помнить, что checkbox принимает не логические значения, а: 0, 1 и 2. Присвоить ему True (-1) не получится.
« Последнее редактирование: 21 Апрель 2022, 09:43 от eeigor » Записан

Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
sokol92
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 909


WWW
« Ответ #2: 21 Апрель 2022, 13:17 »

Диалогам посвящена глава 18 Книги А.Питоньяка OOME_4_0.odt.
Для обхода элементов управления можно использовать следующую схему (см. также комментарии к макросу):
Код:
Sub TestControls
  Dim oDoc, oDlgDesc, oDialog, oControl, s As String
  oDoc=GlobalScope      ' диалог в библиотеке приложения (My Macros)
  ' oDoc=ThisComponent  ' диалог встроен в документ
  oDlgDesc=oDoc.DialogLibraries.GetByName("Standard").GetByName("Dialog1")
  oDialog=CreateUnoDialog(oDlgDesc)
 
  For Each oControl In oDialog.Controls
    ' mri oControl   ' можно исследовать элемент управления с помощью Mri
    s=s & Chr(10) & oControl.Model.Name
  Next oControl
 
  Msgbox s,,"Dialog controls"
End Sub
Записан

Владимир.
siti
Участник
**
Offline Offline

Сообщений: 44


« Ответ #3: 21 Апрель 2022, 13:52 »

При этом надо помнить, что checkbox принимает не логические значения, а: 0, 1 и 2. Присвоить ему True (-1) не получится.
А почему тогда работает следующее
   If Dlg.getControl("ChB11").State = false Then
Записан
sokol92
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 909


WWW
« Ответ #4: 21 Апрель 2022, 14:05 »

Атрибут State имеет тип Short (соответствует Integer в Basic).

Код:
Msgbox CInt(False)

выдает 0.
Записан

Владимир.
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!