:: Архив конференции по VFP до 2005 года
Не активизируется TreeView при показе скрытой формы
matod
Автор

Сообщений: 3062
Откуда: Иркутск
Дата регистрации: 31.10.2001
Hi, All
Столкнулся с такой проблемой:
Есть немодальная форма с гридом form1 на основе класса. У формы есть свойство CL.
Из формы вызывается модальная форма form2 для редактирования записи.
На ней есть кнопка, при нажатии на которую создается Form3 (справочник) по createObject и ссылка на нее сохраняется в свойстве CL формы1. При повторном нажатии форма 3 уже не создается, а просто выполняется метод: thisform.caller.cl.show.
Форма 3 при закрытии не удаляется, а скрывается (hide). При закрытии формы 1 удаляется и форм3
если она есть. Все проверки type, isnull есть везде где необходимо.
Все работает, но с одной странностью - в форме 3 один объект - TreeView. Так вот при первом вызове и последующих до
закрытия окна 2 все работает хорошо, но стоит выйти из формы 2, зайти вновь и вызвать 3,
проявляется глюк - форма 3 на экране, но TreeView не активно и не активизируется щелчком мыши.
Если снова скрыть форму 3 и показать сразу вновь - снова все в порядке.
Такое ощущение, что дерево ведет себя как Enabled=.f., хотя нигде такого кода не выполняется.
Подскажите, где искать.
Ratings: 0 negative/0 positive
Re: Не активизируется TreeView при показе скрытой формы
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
При переключении между формами надо следить за тем, чтобы полностью отработали события и методы объекта TreeView. Т.е. если в форме 2 есть какой-либо ActiveX и вызов формы 3 происходит из событий и методов этого ActiveX, то подобный глюк тебе обеспечен.

Решается это через одноразовые таймеры, единственное назначение которых - это дать завершиться событию или методу ActiveX, а затем выполнить вызов нужной формы. Срабатывать такие таймеры должны только один раз. Потому и "одноразовые".
Ratings: 0 negative/0 positive
Re: Не активизируется TreeView при показе скрытой формы
matod
Автор

Сообщений: 3062
Откуда: Иркутск
Дата регистрации: 31.10.2001
2 Владимир.
В вызывающей форме у меня нет ActiveX, только TreeView в 3-й форме.
Но не исключено, что это похожий случай, поскольку 3-я форма закрывается при выборе элемента дерева по enter или двойному щелчку. Проверю, попробую дать завершиться событиям, отрабатываемым перед закрытием формы 3... О результатх напишу
Ratings: 0 negative/0 positive
Увы :( Не активизируется TreeView при показе скрытой формы
matod
Автор

Сообщений: 3062
Откуда: Иркутск
Дата регистрации: 31.10.2001
Не помогло. Я сделал на форме с TreeView таймер и методы формы, которые раньше вызывались из KeyPress и DblClick дерева теперь выполняются в событии Time таймера. Но глюк остался. Проверил свойство Tree1.Enabled = .T., но скролбары не прокручиваются. И подсвечена текущая строка сереньким цветом, т.е. он как бы не активен...
Помогите, плз... а то я пол-дня воюю с этим и никакого просвета.
Ratings: 0 negative/0 positive
Re: Увы :( Не активизируется TreeView при показе скрытой формы
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
Код таймера должен выглядеть следующим образом:

IF This.Enabled = .T.
this.Enabled = .F.
* Далее вызов нужного метода
ENDIF

У самого таймера устанавливается очень маленький интервал, например, Timer.Interval = 10

В событиях KeyPress или DblClick дерева последней командой активизируешь таймер

ThisForm.Timer1.Enabled = .T.

Хотя, для дерева навешивать что-либо на DblClick - некорректно, поскольку за ним зарезервировано "штатное" действие по разворачиваению и сворачиванию ветки дерева (события Expand и Collapse) . Могут быть конфликты как логические, так и программные. Для предотвращения программных конфликтов нужна настройка

_VFP.AutoYield = .F.
Ratings: 0 negative/0 positive
Re: Увы :( Не активизируется TreeView при показе скрытой формы
matod
Автор

Сообщений: 3062
Откуда: Иркутск
Дата регистрации: 31.10.2001
Про таймер - я так и сделал, AutoYield был .t., поставил .f., для хранения ссылки на форму 3 вместо свойств классов на всякий случай ввел public переменную. Все без толку. По поводу некорректности навешивания на DblClick - это вряд ли, т.к. эффект проявляется даже если я закрываю форму крестиком или по клавише ESC (эта клавиша не попадает в обработчик TreeView, я проверил). Видимо придется бросить - времени сейчас на эксперименты нет
Ratings: 0 negative/0 positive
Re: Увы :( Не активизируется TreeView при показе скрытой формы
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
Цитата:
Видимо придется бросить - времени сейчас на эксперименты нет
Тогда простейшее решение - "забить" на сохранение формы в проперети второй формы. Открывать ее каждый раз заново! Открытие ведь проходит без проблем. Проблемы только после игр с Hide(), Show()

Кстати, как активируешь форму повторно? Имею в виду, какой параметр у FormTreeView.Show()? Не пробовал поиграться этим параметром?

Если найдешь в чем проблема - сообщи...
Ratings: 0 negative/0 positive
Re: Не активизируется TreeView при показе скрытой формы
OPP

Сообщений: 8
Откуда: Togliatti
Дата регистрации: 19.03.2004
Проверь такое:
в метод Form3.Show() вставь строчку:
This.oleControl1.SetFocus().
Ну и если фокус надо на другой контрол поставить,
то далее This.Нужный_контрол.SetFocus()
Ratings: 0 negative/0 positive
Re: Не активизируется TreeView при показе скрытой формы
matod
Автор

Сообщений: 3062
Откуда: Иркутск
Дата регистрации: 31.10.2001
2Владимир.
Цитата:
Тогда простейшее решение - "забить"
Да, пока так и сделаю, и так оно и было. Просто форма долго грузится - там довольно большой иерархический справочник. Я знаю, что правильнее делать загрузку только первого уровня узлов или тех, которые видны в данный момент, а на событие раскрытия узла вешать код расширения дерева, но руки до этого не дошли, думал так временно решить проблему, но видно не судьба. Хотя старнно все это.
С параметром Show баловался. И 1 ставил (форма модальная) и без параметра вызывал (вроде как если WindowType=1, то и Show() должен ее показывать как модальную) - никакого эффекта. И Refresh понаставлял всяких...
Кстати, интересно, что несмотря на то что дерево выглядит неактивным на клавишу enter оно реагирует, но не так, как я прописал в Tree1.KeyPress, а по-умолчанию - сворачивает и разворачивает узел, остальные клавиши - никакой реакции.

2OPP принудительно фокус устанавливал и вSHow и в Activate и на другой контрол переводил

Вообщем, брошу я это, на следующей неделе будет время - поэкспериментирую, напишу.
Ratings: 0 negative/0 positive
Re: Не активизируется TreeView при показе скрытой формы
roman2

Сообщений: 185
Дата регистрации: 07.02.2005
На сколько я понимаю, всё это делается для того, чтобы не грузить лишний раз данные в Tree.
Я решил эту задачу разместив Tree (и не только) в контейнере и динамически изменяю его размеры.
Сначала видна одна кнопка, при нажатии кнопки появляется дерево(как будто в окне) и.т.д.
Ratings: 0 negative/0 positive


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

On-line: 9 (Гостей: 9)

© 2000-2024 Fox Club 
Яндекс.Метрика