Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Формы  [new]
lnu
Member

Откуда: Ukraine, Lviv
Сообщений: 240
Как запустить две формы из prg файла?

Например, у меня форма (ShowWindow=2&& AsTopLevel) на которой две кнопки. В клике первой:
DO test WITH '1',
в клике второй:
DO test WITH '2'.

В Test.prg:
LPARAMETERS cTitle

form1 = CREATEOBJECT('MyForm')
form1.SHOW
form1.caption=cTitle
READ EVENTS

DEFINE CLASS MyForm AS Form
showwindow=1&&InTopLevel
PROCEDURE init
Messagebox(this.caption)
ENDPROC

PROCEDURE unload
CLEAR EVENTS
ENDPROC
ENDDEFINE

Нажимаем первую кнопку - появилась форма с заголовком '1'.
Нажимаем вторую кнопку - первая форма изчезла, вторая не появилась. :(

А я ожидал, что увижу две формы: с заголовком '1' и '2'.
Что тут не так?

Заранее благодарен.
13 окт 03, 16:46    [374596]     Ответить | Цитировать Сообщить модератору
 Re: Формы  [new]
Crip
Member

Откуда:
Сообщений: 2490
form1 у тебя объявляется private переменной и после того как отработает prg переменная уничтожается а вместе с ней и объект на которую она ссылается. Тоже самое произойдет если будет написано public form1. Но уже только при втором вызове.

А зачем в unload clear events?
Вообщем на формы созданные из объектов надо держать "живые" ссылки...
13 окт 03, 17:09    [374666]     Ответить | Цитировать Сообщить модератору
 Re: Формы  [new]
NNN 
Guest
Откуда запускается TopLevel Form? Тут явно путаница с READ EVENTS и с переменной form1.
Может проще что-то вроде:

public MainForm
public form1
public form2
MainForm=createobject('MainForm')
MainForm.Show()
read events

DEFINE CLASS MainForm AS Form
showwindow=2&&InTopLevel
ADD OBJECT command1 AS commandbutton WITH ;
Name = "Command1"
ADD OBJECT command2 AS commandbutton WITH ;
Name = "Command2"
PROCEDURE unload
CLEAR EVENTS
ENDPROC
PROCEDURE command1.Click
form1=createobject('MyForm','1')
form1.show()
ENDPROC
PROCEDURE command2.Click
form2=createobject('MyForm','2')
form2.show()
ENDPROC
ENDDEFINE

DEFINE CLASS MyForm AS Form
showwindow=1&&InTopLevel
PROCEDURE init
lparameters lCaption
this.caption=lCaption
ENDPROC
ENDDEFINE

Код не тестировал, но надеюсь, что основное направление понятно.
13 окт 03, 17:09    [374669]     Ответить | Цитировать Сообщить модератору
 Re: Формы  [new]
lnu
Member

Откуда: Ukraine, Lviv
Сообщений: 240
Главня форма запускалась из scx файла, а дочерные формы из пунктов меню главной формы.
Так вижу, что мне притется переделать главную форму из scx в prg...

И тогда попутный вопрос.

В пункте меню должна быть строка Save.
Как сделать так, чтоб выполнился метод Save активной формы. Т.е. если активная форма 1, то делаем form1.Save, если 2, form2.Save
13 окт 03, 17:45    [374768]     Ответить | Цитировать Сообщить модератору
 Re: Формы  [new]
chagoserg
Member

Откуда: Rostov Don
Сообщений: 157
_Screen.ActiveForm.Save()
13 окт 03, 17:52    [374786]     Ответить | Цитировать Сообщить модератору
 Re: Формы  [new]
Nikolai Kremko
Member

Откуда:
Сообщений: 9
|> Использование форм в FoxPro.... Вдруг кому интересно
14 окт 03, 11:06    [375552]     Ответить | Цитировать Сообщить модератору
 Re: Формы  [new]
chagoserg
Member

Откуда: Rostov Don
Сообщений: 157
2 Nikolai Kremko
;))
14 окт 03, 11:10    [375563]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить