Как из формы открыть другую? [РЕШЕНО]

Автор Yakov, 15 апреля 2010, 00:12

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

Yakov

Вопрос из почты  FAQ:
Цитировать
У меня есть основная форма на которой располагаются кнопки.
При нажатии на кнопку должна открываться соответствующая форма. Как
это сделать, какую команду надо прописать в макросе?

dr.Faust

Я так понимаю обе формы внутри бызы? Тогда так:
thisComponent.Parent.FormDocuments.getByName("MyForm").open
Поясню:
thisComponent - форма из которой вызван макрос
Parent - база как документ которая содержит эту форму и форму которую нужно открыть
FormDocuments - коллекция форм этой базы
getByName("MyForm") - получаем нужную форму как элемент документа БД по имени
open - открываем и радуемся
Свобода информации - свобода личности!

tipgranit

Из одной таблицы созданы форма №1 (в виде списка отображающей данные нескольких первых столбцов исходной таблицы) и форма №2 (в виде карточки отображающей данные всех столбцы строки исходной таблицы).

Как, "стоя" на определенной записи №Х в форме №1, открыть из нее (нажав созданную в форме №1 кнопку) форму №2, но сразу на той самой записи № Х.

Спасибо.

Лапчатый

Цитата: tipgranit от 20 декабря 2010, 13:23Как, "стоя" на определенной записи №Х в форме №1, открыть из нее (нажав созданную в форме №1 кнопку) форму №2, но сразу на той самой записи № Х.
Этот вопрос уже обсуждался:
http://forumooo.ru/index.php/topic,528.0.html
Насколько я понял, средствами Open/Libre Office.Base не решается.
Треба сурьёзное программирование.

MasterLi

Цитата: dr.Faust от 15 апреля 2010, 12:19Я так понимаю обе формы внутри бызы? Тогда так:
Код:
thisComponent.Parent.FormDocuments.getByName("MyForm").open
Поясню:
thisComponent - форма из которой вызван макрос
Parent - база как документ которая содержит эту форму и форму которую нужно открыть
FormDocuments - коллекция форм этой базы
getByName("MyForm") - получаем нужную форму как элемент документа БД по имени
open - открываем и радуемся

А как открыть форму, если она в папке форм ?

MasterLi

Матчасть говорит следующее, но так и не понял как прописать путь до формы правильно.

Navigation from one form to another
A form is to be opened when a particular event occurs.
In the form control properties, on the line "Additional information" (tag), enter the name of the form.
Further information can also be entered here, and subsequently separated out by using the
Split() function.
SUB From_form_to_form(oEvent AS OBJECT)
DIM stTag AS String
stTag = oEvent.Source.Model.Tag
aForm() = Split(stTag, ",")
The array is declared and filled with the form names, first the form to be opened and secondly the
current form, which will be closed after the other has been opened.
ThisDatabaseDocument.FormDocuments.getByName( Trim(aForm(0)) ).open
ThisDatabaseDocument.FormDocuments.getByName( Trim(aForm(1)) ).close
END SUB
If instead, the other form is only to be opened when the current one is closed, for example where a
main form exists and all other forms are controlled from it using buttons, the following macro
should be bound to the form with Tools > Customize > Events > Document closed:
SUB Mainform_open
ThisDatabaseDocument.FormDocuments.getByName( "Mainform" ).open
END SUB
If the form documents are sorted within the ODB file into directories, the macro for changing the
form needs to be more extensive:
SUB From_form_to_form_with_folders(oEvent AS OBJECT)
REM The form to be opened is given first.
REM If a form is in a folder, use "/" to define the relationship
REM so that the subfolder can be found.
DIM stTag AS STRING
stTag = oEvent.Source.Model.Tag 'Tag is entered in the additional
information
aForms() = Split(stTag, ",") 'Here the form name for the new form comes
first, then the one for the old form
aForms1() = Split(aForms(0),"/")
aForms2() = Split(aForms(1),"/")
IF UBound(aForms1()) = 0 THEN
ThisDatabaseDocument.FormDocuments.getByName( Trim(aForms1(0)) ).open
ELSE
ThisDatabaseDocument.FormDocuments.getByName(
Trim(aForms1(0)) ).getByName( Trim(aForms1(1)) ).open
END IF
Improving usability 21
IF UBound(aForms2()) = 0 THEN
ThisDatabaseDocument.FormDocuments.getByName( Trim(aForms2(0)) ).close
ELSE
ThisDatabaseDocument.FormDocuments.getByName(
Trim(aForms2(0)) ).getByName( Trim(aForms2(1)) ).close
END IF
END SUB
Form documents that lie in a directory are entered into the Additional Information field as
directory/form. This must be converted to:
...getByName("Directory").getByName("Form").