LibreOffice Basic получает элементы из формы

Я пытаюсь получить значение из текстового поля в форме.

sub Test(oEv)

oForm = oEv.Source.Model.Parent
textBox = oForm.getByName("Description")
MsgBox textBox.Text

end sub

Есть исключение: «Тип: com.sun.star.container.NoSuchElementException» в строке «textBox = oForm.getByName». У меня есть текстовое поле с названием «Описание» в той же форме, где находится кнопка, которую я нажимаю для запуска этого макроса. Что здесь не так?


person Kiryl Tkach    schedule 29.09.2016    source источник


Ответы (1)


Убедитесь, что имя написано в том же регистре, а не description.

Кроме того, используйте Навигатор форм, чтобы определить, находится ли элемент управления под формой в иерархии.

Пробовали ли вы использовать инструмент самоанализа, такой как МРТ или XrayTool, чтобы просмотреть свойства oForm? С помощью инструмента разверните форму, чтобы увидеть, содержит ли она элемент управления Description.

Часто в Base лучше работать с формой как с набором записей, чем с чтением элементов управления. Вот пример кода:

Sub ButtonClickHandler(oEvent as Object)
    'com.sun.star.comp.forms.ODatabaseForm
    oForm = oEvent.Source.Model.Parent
    lDescriptionCol = oForm.findColumn("DESCRIPTION")  ' from underlying query or table
    Print(oForm.getString(lDescriptionCol))
    BasicLibraries.LoadLibrary("XrayTool")
    xray(oForm)
End Sub

Дополнительные идеи см. На странице https://forum.openoffice.org/en/forum/viewtopic.php?f=39&t=38725.

person Jim K    schedule 29.09.2016
comment
Спасибо за ваш совет. Я попробовала МРТ, но это не помогло мне найти решение. Затем я попытался перезапустить LibreOffice - и все заработало! Не знаю, что вызвало эту проблему. - person Kiryl Tkach; 29.09.2016