Доступ к ListBox на форме [РЕШЕНО]

Автор varyagnord, 17 октября 2010, 13:51

0 Пользователи и 1 гость просматривают эту тему.

varyagnord

Приветствую всех.

Прошу помощи. Имеется Форма и на ней ListBox. Треюуется по нажатию кнопки добавить в лист бокс еще одну запись.

На кнопке висит такой макрос:


Sub changeLBSource
dim oDoc as object, oForm as object
dim oListBox as object
dim nCount As Integer

oDoc = ThisComponent
oForm = oDoc.DrawPage.Forms(0)
oListBox = oForm.getByName("ListBox")
REM nCount = olist_box.getItemCount()
nCount = oListBox.LineCount()
oListBox.addItem("New Item", nCount)
oListboxModel.refresh()

End Sub


При его выполнении возникает ошибка: "Свойство или метод не найдены addItem"

Как я понял у объектов Form и Diolog разные методы для ListBox.
Например olist_box.getItemCount() - для Diaolog
           и nCount = oListBox.LineCount() - для Form
Может быть и для добавления записи у Form другой метод.

Помогите пожалуйста разобраться с проблемой.

prof-alex

Из справки:
ЦитироватьВ следующей таблице на примере списка "ListBox1" показаны связи между полями Содержимое списка HTML, JavaScript и OpenOffice.org. В этом случае "Item" означает элемент, отображаемый в форме.
Тег HTMLJavaScriptЭлемент в списке значений элемента управления (содержимое списка)Переданные данные
<OPTION>ItemНевозможно""видимый элемент списка ("ListBox1=Item")
<OPTION VALUE="Value">ItemListBox1.options[0].value="Value""Значение"Значение, назначенное элементу списка ("ListBox1=Value")
<OPTION VALUE="">ItemListBox1.options[0].value="""$$$empty$$$"Пустая строка ("ListBox1=")
Т.е., нужно добраться до options по меньшей мере.

«Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации» Э. Дейкстра

varyagnord

Добираться до Options, как я понимаю следует при использовании JavaScript.
Я же использую при написании макроса OOo Basic.

prof-alex

Вы думаете под разные языки у ООо будут разные объектные модели? Практика показывает что нет. Но если очень лениво ковыряться на сайте http://api.openoffice.org/ то можно поставить MRI или Xray Storm и посмотреть в каких дебрях спрятан массив значений.

«Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации» Э. Дейкстра

varyagnord

На этих cайтах я уже поискал. Не спорю возможно, что плохо.

Вот пример с этого сайта для Dialog:
ЦитироватьIt may be easier to use the com.sun.star.awt.XListBox interface when working with list boxes, because an item can be added to a list at a specific position with the addItem method. For example, an item is added at the end of the list by:
 Dim nCount As Integer

 olist box = oDialog.getControl("list box1")
 nCount = olist box.getItemCount()
 olist box.addItem( "New Item", nCount )

prof-alex

#5
Цитата: varyagnord от 17 октября 2010, 14:42
Вот пример с этого сайта для Dialog:
Для диалога может быть и другой интерфейс задействован. Там, в справке, указывается, что список может получать массив данных из БД, в этом случае, использование простого массива будет мало, что и могло привести к усложнению объектной модели ListBox'а.
Если есть возможность, выложите файл с которым вы работаете.

smaharbA, советую не флудить на форуме, а отвечать по существу.

«Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации» Э. Дейкстра

varyagnord

Все оказалось намного проще...
Вот так всё работает. :)
Тему можно закрывать.

Sub changeLBSource
dim oDoc as object, oForm as object
dim oListBox as object
Dim nCount As Integer

oDoc = ThisComponent
oForm = oDoc.DrawPage.Forms(0)
oListBox = oForm.getByName("ListBox")
oListboxControl = oDoc.getCurrentController().getControl(oListBox)
oListboxControl.addItem("455", 0)


End Sub

smaharbA

Я конечно далек от мысли... (с)