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

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

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

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Получить доступ к объекту, вызывающему обработчик событий  (Прочитано 524 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Tillevion
Участник
**
Offline Offline

Сообщений: 22


« Стартовое сообщение: 29 Август 2018, 17:43 »

Такая ситуация. Есть ряд объектов, вызывающих общий обработчик событий. Можно ли из обработчика событий получить название вызвавшего его объекта?
Пример:

Код:
Sub Main
  oDlgModel = CreateUnoService("com.sun.star.awt.UnoControlDialogModel")
  oDlgModel.setPropertyValue("Width", 35)
  oDlgModel.setPropertyValue("Height", 30)
  oDlg = CreateUnoService("com.sun.star.awt.UnoControlDialog")
  oDlg.setModel(oDlgModel)
  oWindow = CreateUnoService("com.sun.star.awt.Toolkit")
  oDlg.createPeer(oWindow, null)
  j% = 1
  For i% = 0 to j
oModel = oDlgModel.createInstance("com.sun.star.awt.UnoControlRadioButtonModel")
oModel.setPropertyValue("PositionX", 5)
oModel.setPropertyValue("PositionY", 5 + 12 * i)
oModel.setPropertyValue("Width", 30)
oModel.setPropertyValue("Height", 10)
oModel.setPropertyValue("Label", "Item" & i)
oDlgModel.insertByName("Field" & i, oModel)
oDlg.getControl("Field" & i).addItemListener(CreateUnoListener("Fields_", "com.sun.star.awt.XItemListener"))
  Next
  oDlg.execute()
End Sub

Sub Fields_itemStateChanged
  Print "Какой переключатель выбран?"
End Sub
« Последнее редактирование: 29 Август 2018, 17:47 от Tillevion » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 637


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 29 Август 2018, 18:31 »

А если "в лоб"?
Код:
Sub Fields_itemStateChanged()
  j% = 1
  For i% = 0 to j
  If oDlgModel.getByName("Field" & i).State Then Print "Какой переключатель выбран? " & i
  Next i
End Sub
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Tillevion
Участник
**
Offline Offline

Сообщений: 22


« Ответ #2: 29 Август 2018, 18:44 »

Это, конечно, сработает. Но если мы имеем дело с другими элементами управлениями? Например полями валюты, и нам нужно отслеживать изменения в них. Не хотелось бы создавать массив с текущими значениями и отслеживать какое из них изменилось - громоздко.
« Последнее редактирование: 29 Август 2018, 18:47 от Tillevion » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 637


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #3: 29 Август 2018, 19:54 »

Не хотелось бы создавать массив... - громоздко.
И создавать диалог не программно, а в редакторе - тоже громоздко? Там весь спектр событий сразу перед глазами...


* События радиокнопки.png (13.03 Кб, 494x378 - просмотрено 7 раз.)
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #4: 29 Август 2018, 20:19 »

Макрос Main остаётся без изменений, а Fields_itemStateChanged немного изменяется:
Код:
Sub Fields_itemStateChanged(event)
  Print "Выбран переключатель " & event.Source.Model.Label
End Sub
Записан

Tillevion
Участник
**
Offline Offline

Сообщений: 22


« Ответ #5: 30 Август 2018, 00:16 »

И создавать диалог не программно, а в редакторе - тоже громоздко? Там весь спектр событий сразу перед глазами...
Здесь вся штука в динамическом числе строк, поэтому редактор не подходит: j может меняться.

Макрос Main остаётся без изменений, а Fields_itemStateChanged немного изменяется:
Код:

Sub Fields_itemStateChanged(event)
  Print "Выбран переключатель " & event.Source.Model.Label
End Sub
Супер! Работает! Спасибо!)
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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