:: Visual Foxpro, Foxpro for DOS
Как в Гриде выделить определённую строку
maximus
Автор

Сообщений: 34
Откуда: ukraine, sumy
Дата регистрации: 10.07.2003
Здраствуйте.
Тут такая проблема: на форме есть грид, привязаный к таблице sim, и кнопки передвижения по груду (вверх, вниз), и нужно когда двигаемся по таблице, то активная строка должна выделятся и двигатся выдиление должно соотвественно перемищению курсора по таблице...
Запутаный какоё-то вопрос получился ... Пожайлуста, помогите
Ratings: 0 negative/0 positive
Re: Как в Гриде выделить определённую строку
Hel!Riser

Сообщений: 10452
Откуда: Нижний Новгород
Дата регистрации: 11.03.2001
велкам www.foxclub.ru




------------------
Осторожно - глисты!
Ratings: 0 negative/0 positive
Re: Как в Гриде выделить определённую строку
maximus
Автор

Сообщений: 34
Откуда: ukraine, sumy
Дата регистрации: 10.07.2003
пасиба
Ratings: 0 negative/0 positive
ещё вопрос...
maximus
Автор

Сообщений: 34
Откуда: ukraine, sumy
Дата регистрации: 10.07.2003
код кнопки, которой я двигаюсь по даблице:
if !eof()
skip
endif
_screen.ActiveForm.Refresh()

токо курсор в таблице почему-то не обновляется... что делать?
Ratings: 0 negative/0 positive
Re: ещё вопрос...
Hel!Riser

Сообщений: 10452
Откуда: Нижний Новгород
Дата регистрации: 11.03.2001
_screen.ActiveForm.Refresh() замени на thisform.grd.Refresh(), если кнопка на форме с гридом ессна и grd - название твоего грида




------------------
Осторожно - глисты!
Ratings: 0 negative/0 positive
Re: ещё вопрос...
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
И в skip, для полной уверенности, добавь in (ThisForm.Grd.RecordSource)




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: ещё вопрос...
maximus
Автор

Сообщений: 34
Откуда: ukraine, sumy
Дата регистрации: 10.07.2003
не обновляется....
Ratings: 0 negative/0 positive
Re: ещё вопрос...
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
Тогда еще и тут правь: if eof(ThisForm.Grd.RecordSource)




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: ещё вопрос...
maximus
Автор

Сообщений: 34
Откуда: ukraine, sumy
Дата регистрации: 10.07.2003
хм... тута у меня сам грид не обновляется...
Ratings: 0 negative/0 positive
Re: ещё вопрос...
maximus
Автор

Сообщений: 34
Откуда: ukraine, sumy
Дата регистрации: 10.07.2003
refresh на грид вообще не действует что может быть?
Ratings: 0 negative/0 positive
Re: ещё вопрос...
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
Вместо Grd.Refresh поставь Grd.SetFocus




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: ещё вопрос...
maximus
Автор

Сообщений: 34
Откуда: ukraine, sumy
Дата регистрации: 10.07.2003
пасиба... получилось!
Ratings: 0 negative/0 positive
Re: ещё вопрос...
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
И еще, хотя может и крамольное учение, в Botton.Click можно оставить две строчки
skip in (ThisForm.Grd.RecordSource)
ThisForm.Grd.SetFocus




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: ещё вопрос...
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi AleksM!

И в Error event ловить ошибку перемещения за EOF? IMHO проще это
предупредить проверкой на EOF в коде перемещения.

P.S. Хинт - таблица отображаемая в гриде может быть и пустой!




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: ещё вопрос...
AleksM

Сообщений: 17881
Дата регистрации: 11.11.2003
Согласен.
Что самое интересное, при пустом гриде SKIP -1 ошибки не вызывает, а SKIP 1 дает ошибку.




------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive
Re: ещё вопрос...
Alex Roublev

Сообщений: 3695
Откуда: Ярославль
Дата регистрации: 28.09.2002
2 AleksM:

Цитата:
Что самое интересное, при пустом гриде SKIP -1 ошибки не вызывает, а SKIP 1 дает ошибку.

Фокс "затихарился" и "по-умолчанию" не выдает ошибку. Если прибывить к тому толику воображения, то:

При RecCount() = 0 может быть получается так: SKIP-1 = NO SKIP = RETURN = 0 = ЗАПИСИ С ТАКИМ ПОРЯДКОВЫМ НОМЕРОМ НЕ СУЩЕСТВУЕТ В ПРИНЦИПЕ, ПОЭТОМУ ВЫБРАСЫВАТЬ СООБЩЕНИЕ ОБ ОШИБКЕ ДАЖЕ НЕ БУДЕМ, а SKIP или SKIP 1 = ERROR = НЕТ ЗАПИСИ С ТАКИМ ПОРЯДКОВЫМ НОМЕРОМ = КАРАУЛ!

ReccCount() ---> 0 - 1 = 0 (-1)

Хе...
Ratings: 0 negative/0 positive
Re: Как в Гриде выделить определённую строку
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
Я хотел добавить это в FAQ, но для начала решил почитать журнал FoxTalk.

Русскоязычное издание FoxTalk январь 2004 №1 (79) (Для англоязычного оригинала на 8 месяцев раньше)

The Kit Box: Ну вот и расскрасили Энди Крамек и Марсиа Акинз

В этой статье Марсиа Акинз называют "Королевой объекта Grid"

Так вот, она для замены проперти ThisForm.nRecno использует не событие Grid.AfterRowColChange(), а событие When всех вложенных объектов в столбцах Grid (!). Ну, отсюда тянется цепочка разных проблем, которые она героически преодолевает.

Кто-нибудь может объяснить, почему? Т.е. чем использование Grid.Column1.Text1.When() - для каждого элемента предпочительнее Grid.AfterRowColChange() пир обновлении ThisForm.nRecno = Recno()?
Ratings: 0 negative/0 positive
Как в Гриде...
Alex Roublev

Сообщений: 3695
Откуда: Ярославль
Дата регистрации: 28.09.2002
2 Владимир Максимов:

Цитата:
чем использование Grid.Column1.Text1.When() - для каждого элемента предпочительнее Grid.AfterRowColChange()

Когда-то натолкнулся вот на такую вещь: событие When отрабатывает в последовательности Grid.When, а потом Text.When. AfterRowColChange отрабатывает перед Text.When. В чем предпочтительность прописывать реакцию при перемещении по Grid в When объекта, а не в AfterRowColChange? Из When, как и из Valid, нельзя использовать метод установки фокуса на другой объект, а из AfterRowColChange можно. В чем же предпочтительность?

--------------------------------------------------------------------------------------

Я вот как-то понаписал всякого в AfterRowColChange и получил "тормоза" при движении по строкам Grid'а:

Объекты, соседствовавшие с Grid, при перемещении по строкам Grid следовало обновлять. Поэтому объекты поместил в контейнер, который и обновлял единой программной строчкой. Контейнер, в свою очередь, обновлял дочерние объекты "автоматом". Потом представлялось два варианта - поместить обновление контейнера с объектами в AfterRowColChange или в таймер на форме, который по заданному интервалу сам будет обновлять этот контейнер не зависимо от того, двигается ли пользователь по Grid. Первый вариант обновлял контейнер синхронно с движением по Grid и перемещение не имело плавности. Второй вариант - обновление шло немного не синхронно, но движение по строкам при этом было плавным и скорым, без задержки при обработке того, что находится в AfterRowColChange, и без очевидного "подпрыгивания" указателя строки.



Отредактировано (30.03.05 19:54)


------------------
И волки сыты, и овцы целы, и пастуху - вечная память...
Ratings: 0 negative/0 positive
Re: ещё вопрос...
Равиль

Сообщений: 6555
Откуда: Уфа
Дата регистрации: 01.08.2003
Alex Roublev писал(а):[quote]2 AleksM:
[quote]Что самое интересное, при пустом гриде SKIP -1 ошибки не вызывает, а SKIP 1 дает ошибку.[/quote]
[quote] Фокс "затихарился" и "по-умолчанию" не выдает ошибку. Если прибывить к тому толику воображения, то:
При RecCount() = 0 может быть получается так: SKIP-1 = NO SKIP = RETURN = 0 = ЗАПИСИ С ТАКИМ ПОРЯДКОВЫМ НОМЕРОМ НЕ СУЩЕСТВУЕТ В ПРИНЦИПЕ, ПОЭТОМУ ВЫБРАСЫВАТЬ СООБЩЕНИЕ ОБ ОШИБКЕ ДАЖЕ НЕ БУДЕМ, а SKIP или SKIP 1 = ERROR = НЕТ ЗАПИСИ С ТАКИМ ПОРЯДКОВЫМ НОМЕРОМ = КАРАУЛ!
ReccCount() ---> 0 - 1 = 0 (-1)
Хе...[/quote]
imho при отображении пустой таблицы в гриде указатель уже находится в EOF() и команда Skip ес-но приводит к сообщению об ошибке.
а Skip -1 отрабатывает без ошибки потому что указатель переходит в BOF() (recno=0) - такая запись существует - это заголовок таблицы,
но следующая Skip -1 уже поругается о том, что мы итак уже в BOF().



Отредактировано (30.03.05 20:45)


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: Как в Гриде выделить определённую строку
Равиль

Сообщений: 6555
Откуда: Уфа
Дата регистрации: 01.08.2003
Владимир Максимов писал(а):
Цитата:
Я хотел добавить это в FAQ, но для начала решил почитать журнал FoxTalk.
Русскоязычное издание FoxTalk январь 2004 №1 (79) (Для англоязычного оригинала на 8 месяцев раньше)

The Kit Box: Ну вот и расскрасили Энди Крамек и Марсиа Акинз

В этой статье Марсиа Акинз называют "Королевой объекта Grid"

Так вот, она для замены проперти ThisForm.nRecno использует не событие Grid.AfterRowColChange(), а событие When всех вложенных объектов в столбцах Grid (!). Ну, отсюда тянется цепочка разных проблем, которые она героически преодолевает.

Кто-нибудь может объяснить, почему? Т.е. чем использование Grid.Column1.Text1.When() - для каждого элемента предпочительнее Grid.AfterRowColChange() пир обновлении ThisForm.nRecno = Recno()?
Конечно не видя ее кода трудно судить, но возможная причина - ..AfterRowColChange() отрабатывает не всегда (например при входе в грид на текущую строку, а ..When() обязательно - возможно так она хотела исключить подобные ситуации - хотя согласен, что героизм при этом излишен - не такая уж это критичная операция.




------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive


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

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

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