Не активизируется 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., хотя нигде такого кода не выполняется. Подскажите, где искать. |
Re: Не активизируется TreeView при показе скрытой формы | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
При переключении между формами надо следить за тем, чтобы полностью отработали события и методы объекта TreeView. Т.е. если в форме 2 есть какой-либо ActiveX и вызов формы 3 происходит из событий и методов этого ActiveX, то подобный глюк тебе обеспечен.
Решается это через одноразовые таймеры, единственное назначение которых - это дать завершиться событию или методу ActiveX, а затем выполнить вызов нужной формы. Срабатывать такие таймеры должны только один раз. Потому и "одноразовые". |
Re: Не активизируется TreeView при показе скрытой формы | |
---|---|
matod Автор Сообщений: 3062 Откуда: Иркутск Дата регистрации: 31.10.2001 |
2 Владимир.
В вызывающей форме у меня нет ActiveX, только TreeView в 3-й форме. Но не исключено, что это похожий случай, поскольку 3-я форма закрывается при выборе элемента дерева по enter или двойному щелчку. Проверю, попробую дать завершиться событиям, отрабатываемым перед закрытием формы 3... О результатх напишу |
Увы :( Не активизируется TreeView при показе скрытой формы | |
---|---|
matod Автор Сообщений: 3062 Откуда: Иркутск Дата регистрации: 31.10.2001 |
Не помогло. Я сделал на форме с TreeView таймер и методы формы, которые раньше вызывались из KeyPress и DblClick дерева теперь выполняются в событии Time таймера. Но глюк остался. Проверил свойство Tree1.Enabled = .T., но скролбары не прокручиваются. И подсвечена текущая строка сереньким цветом, т.е. он как бы не активен...
Помогите, плз... а то я пол-дня воюю с этим и никакого просвета. |
Re: Увы :( Не активизируется TreeView при показе скрытой формы | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Код таймера должен выглядеть следующим образом:
У самого таймера устанавливается очень маленький интервал, например, Timer.Interval = 10 В событиях KeyPress или DblClick дерева последней командой активизируешь таймер ThisForm.Timer1.Enabled = .T. Хотя, для дерева навешивать что-либо на DblClick - некорректно, поскольку за ним зарезервировано "штатное" действие по разворачиваению и сворачиванию ветки дерева (события Expand и Collapse) . Могут быть конфликты как логические, так и программные. Для предотвращения программных конфликтов нужна настройка _VFP.AutoYield = .F. |
Re: Увы :( Не активизируется TreeView при показе скрытой формы | |
---|---|
matod Автор Сообщений: 3062 Откуда: Иркутск Дата регистрации: 31.10.2001 |
Про таймер - я так и сделал, AutoYield был .t., поставил .f., для хранения ссылки на форму 3 вместо свойств классов на всякий случай ввел public переменную. Все без толку. По поводу некорректности навешивания на DblClick - это вряд ли, т.к. эффект проявляется даже если я закрываю форму крестиком или по клавише ESC (эта клавиша не попадает в обработчик TreeView, я проверил). Видимо придется бросить - времени сейчас на эксперименты нет
|
Re: Увы :( Не активизируется TreeView при показе скрытой формы | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Цитата:Тогда простейшее решение - "забить" на сохранение формы в проперети второй формы. Открывать ее каждый раз заново! Открытие ведь проходит без проблем. Проблемы только после игр с Hide(), Show() Кстати, как активируешь форму повторно? Имею в виду, какой параметр у FormTreeView.Show()? Не пробовал поиграться этим параметром? Если найдешь в чем проблема - сообщи... |
Re: Не активизируется TreeView при показе скрытой формы | |
---|---|
OPP Сообщений: 8 Откуда: Togliatti Дата регистрации: 19.03.2004 |
Проверь такое:
в метод Form3.Show() вставь строчку: This.oleControl1.SetFocus(). Ну и если фокус надо на другой контрол поставить, то далее This.Нужный_контрол.SetFocus() |
Re: Не активизируется TreeView при показе скрытой формы | |
---|---|
matod Автор Сообщений: 3062 Откуда: Иркутск Дата регистрации: 31.10.2001 |
2Владимир.
Цитата:Да, пока так и сделаю, и так оно и было. Просто форма долго грузится - там довольно большой иерархический справочник. Я знаю, что правильнее делать загрузку только первого уровня узлов или тех, которые видны в данный момент, а на событие раскрытия узла вешать код расширения дерева, но руки до этого не дошли, думал так временно решить проблему, но видно не судьба. Хотя старнно все это. С параметром Show баловался. И 1 ставил (форма модальная) и без параметра вызывал (вроде как если WindowType=1, то и Show() должен ее показывать как модальную) - никакого эффекта. И Refresh понаставлял всяких... Кстати, интересно, что несмотря на то что дерево выглядит неактивным на клавишу enter оно реагирует, но не так, как я прописал в Tree1.KeyPress, а по-умолчанию - сворачивает и разворачивает узел, остальные клавиши - никакой реакции. 2OPP принудительно фокус устанавливал и вSHow и в Activate и на другой контрол переводил Вообщем, брошу я это, на следующей неделе будет время - поэкспериментирую, напишу. |
Re: Не активизируется TreeView при показе скрытой формы | |
---|---|
roman2 Сообщений: 185 Дата регистрации: 07.02.2005 |
На сколько я понимаю, всё это делается для того, чтобы не грузить лишний раз данные в Tree.
Я решил эту задачу разместив Tree (и не только) в контейнере и динамически изменяю его размеры. Сначала видна одна кнопка, при нажатии кнопки появляется дерево(как будто в окне) и.т.д. |
© 2000-2024 Fox Club  |