Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / управление одной формы из кода другой / 9 сообщений из 9, страница 1 из 1
24.10.2004, 13:42
    #32751798
sokol_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
управление одной формы из кода другой
Добрый день.
Понимаю что вопрос дурацкий, но никак разобраться не могу.
Есть у меня 12 схожих форм: MyForm1 ,MyForm2,MyForm3 ... я хочу орнанизовать поиск (или фильтр) в другой форме :frmFind,пишу код в frmFind : MyForm1.dw_1.Filtr("Cod=10") ,но мне нужно применять ту же форму для поиска и в MyForm2 и в MyForm3...
Select Case пользоваться не хочу. Hе стороить же мне 12 новых форм поиска :) . Есть ли способ передавать в форму объект ,как это например в .NET

object myObject
myObject.dw_1.Filtr("Cod=10")

т.е форма frmFind знает какой объект пришёл и из какой формы. В PB строка myObject.dw_1.Filtr("Cod=10") не проходит.
Помогите плз.
...
Рейтинг: 0 / 0
24.10.2004, 15:25
    #32751834
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
управление одной формы из кода другой
Вместо оператора Open для открытия формы с передачей ей параметров нужно использовать OpenWithParm и ни в коем случае не ссылаться из кода одной формы в другую, думаю по парадигме ООП обьяснять этого не надо, раз работали с C# :)
...
Рейтинг: 0 / 0
24.10.2004, 16:39
    #32751851
sokol_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
управление одной формы из кода другой
а если у меня упраление формой (Addnew, Update и т.д.) через меню организовано, так что же мне построить
12 меню, для каждой формы своё? или всё таки есть способ в PB написать типо : myObject .dw_1.Filtr("Cod=10")
где myObject это нужная мне форма,и парадигма ООП здесь не причём, часто приходиться управлять одной формой
из другой, форма FIND тому пример.
...
Рейтинг: 0 / 0
24.10.2004, 19:38
    #32751898
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
управление одной формы из кода другой
По парадигме ООП каждый обьект должен быть независимым и автономным. Это в полной мере относиться и к формам. Ну хотите Вы с меню управлять формой, так кто Вам спрашивается мешает с меню вызывать события у формы следующим образом:
Код: plaintext
ParentWindow.dynamic event AddNew ()
Если форма-родитель этого меню имеет событие AddNew, то оно будет вызвано, в нем и определете код выполнения, если не имеет, то вызов события сработает вхолостую и никто не пострадает. Это позволяет меню просто посылать команды форме, не особо задумываясь, какие элементы на ней лежат, какие переменные обьявленны и какие методы у нее существуют, что означает возможность использования такого меню для любой формы. То же самое применимо к любым случаям - например если есть модальная форма, то она должна иметь точку входа и точку выхода передачи информации, ей совсем необязательно знать с кем она работает и уж тем более никто не должен знать о том как она работает, главное что известно что ей нужно отдать, какое действие она произведет и в каком виде результат возвратит. Если же Вы будете писать в таком духе:
авторmyObject.dw_1.Filtr("Cod=10")
то кроме ошибок и вылетаний PB Вы не получите. Зато привяжетесь к элементам формы и переименовав dw_1 в dw_2 получите полностью неработоспособное приложение. Рекомендую почитать умные книжки по ООП - по наследованию, инкапсуляции и полиморфизме. Чтобы приложение на PB было гибким и красивым, очень желательно придерживаться этих правил, это гарантирует не только избежание многих ошибок, но и существенно повысит скорость разработки - если в приложении обьекты независимы и автономны, то значит такие обьекты можно повторно использовать, расширять и нарабатывать свою библиотеку готовых и проверенных решений.
...
Рейтинг: 0 / 0
25.10.2004, 00:51
    #32751979
sokol_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
управление одной формы из кода другой
с меню разобрался , а вот с модальными формами туго что то, не могли бы примерчик привести или ссылочку дать,
как всётаки организовать "вход и выход"? Как фильтровать данные из модального окна.

P.S. поверьте, ну заставили программиста на .Net изучить PB, книг нет , примеров тоже, просто жуть :)
...
Рейтинг: 0 / 0
25.10.2004, 04:26
    #32751995
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
управление одной формы из кода другой
Посмотрите как в PFC сделаны w_find, w_zoom, w_filterXXX, w_sortXXX и т.п.

Желательно чтобы "схожие" формы унаследованы были от одного ancestor-а.
Но даже если это не так - все равно выкрутится можно. Например через тот же dynamic.

И еще где-то была статья по поводу эмуляции интерфейсов на PB. Ссылку потерял... Ни у кого не сохранилась случайно?
...
Рейтинг: 0 / 0
25.10.2004, 04:30
    #32751996
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
управление одной формы из кода другой
Вдогонку...

myObject.dw_1.Filtr("Cod=10") - это порнография.
не должна форма поиска знать что там есть dw_1.
может у одной формы этот вызов будет выглядеть как myObject.dw_1.Filter(...)
а у другой myObject.tab_xxx.tabpage_xxx.dw_1.Filter(...)
А так сказал myObject.of_SetFilter(...)
и пусть myObject сам разбирается где там у него dw_1 и как к нему фильтр приложить.
...
Рейтинг: 0 / 0
25.10.2004, 12:00
    #32752421
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
управление одной формы из кода другой
sokol_с меню разобрался , а вот с модальными формами туго что то, не могли бы примерчик привести или ссылочку дать,
как всётаки организовать "вход и выход"? Как фильтровать данные из модального окна.
Пока модальное окно работает, другие окна стоят - это факт. Значит главное назначение модального окна - чего то запросить по требуемым данным и вернуть результат. В итоге например у нас модальное окно занимается построением строки фильтра для DataWindow. Ему нужно передать ссылку на DataWindow, на выходе вернуть код успешности выполнения операции. Делаем модальное окно w_Find, в нем прописываем локальные переменные dw_Find и str_Find:
Код: plaintext
1.
private DataWindow dw_Find
private string str_Find
на событие формы Open получаем переданный DataWindow и его текущий фильтр:
Код: plaintext
1.
2.
3.
4.
// Получаем DataWindow
dw_Find = Message.PowerObjectParm

// Получаем для него текущую строку фильтра
str_Find = dw_Find.Describe( 'DataWindow.Table.Filter' )
Далее идет собственно процесс построения фильтра с занесением его строки в str_Find. На событие кнопки Ok вешаем выполнение фильтра, закрытие формы с возвратом успешности выполнения:
Код: plaintext
1.
2.
3.
4.
5.
// Выходим, если не получилось установить фильтр
if dw_Find.SetFilter( str_Find ) = - 1  then return
if dw_Find.Filter() = - 1  then return

// Закрываем форму
CloseWithReturn( Parent,  1  )
На событие кнопки Cancel вешаем выход с возвратом отказа:
Код: plaintext
CloseWithReturn( Parent, - 1  )
Форма готова к использованию. Теперь вызовем ее с формы для построения фильтра:
Код: plaintext
1.
2.
3.
4.
// Вызываем форму построения фильтра
OpenWithParm( w_Find, dw_1 )

// Получаем результат
if Message.LongParm =  1  then MessageBox( 'Отлично', 'Фильтр выполнен', Information! )
Форма выбора фильтра получилась независимой. При желании можно сделать еще более красиво - наследуемся от базового контролса DataWindow и создаем собственный обьект u_dw. В нем создаем новый метод " FilterFromDialog (): integer ", в который и переносим этот код. Теперь вместо базового DataWindow достаточно на форму шлепнуть собственный и в любой момент вызывать FilterFromDialog() :)

sokol_P.S. поверьте, ну заставили программиста на .Net изучить PB, книг нет , примеров тоже, просто жуть :)
Странно честно говоря - в ДотНете все что я описал вообще на первом месте стоит - главное там правильное проектирование приложения, с созданием наследуемых контролсов и форм, там фактически даже DataSet-ы генерятся в проект как классы и могут далее наследоваться для дальнейшего расширения. Видимо Вы недавно работаете с ним и пока занимаетесь киданием компонентов на формочки :) В этом плане на PB Вам придется учиться мыслить правильно, заодно и в .NET потом здорово пригодиться, для которого кстати есть возможность использовать PB DataWindow через специальный для него компонент DataWindow.NET .
...
Рейтинг: 0 / 0
26.10.2004, 00:24
    #32753883
sokol_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
управление одной формы из кода другой
Spasibo za otveti ,ochen pomogli .
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / управление одной формы из кода другой / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]