powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как определить, на какой колонке грида был клик (событие вяжется по bindevent - VFP8) ?
6 сообщений из 6, страница 1 из 1
Как определить, на какой колонке грида был клик (событие вяжется по bindevent - VFP8) ?
    #35138886
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть класс (форма с гридом на ней) для грида с переменным числом колонок.
На ините грида есть инициализация колонок с привязкой события к хидеру :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
this.ColumnCount = FCOUNT()
FOR i =  1  TO this.ColumnCount
   this.Columns[i].Name = "Cl" + FIELD(i)
   this.Columns[i].ControlSource = this.RecordSource + "." + FIELD(i)
   ...
   this.Columns[i].Header1.alignment =  2 
   ...
   BINDEVENT(this.Columns[i].Header1, "Click", THISFORM, "SortbyColumn",  0 )
ENDFOR

На форме с этим гридом есть событие SortByColumn :

Код: plaintext
1.
2.
3.
this.Grid.SetFocus()
* определяем, по какой колонке сортировать надо
stFieldForOrderBy = this.Grid.Columns[this.Grid.ActiveColumn].ControlSource

Фигня в том, что если колонка была активна (то есть курсор на ней стоял), то ActiveColumn правильно показывает. А если щелкать только по хидерам - то ActiveColumn начинает показывать на 1 колонку. А как правильно все-таки определить, на каком объекте грида пользователь щелкает мышей ? Aevents() возвращает весь грид :(
...
Рейтинг: 0 / 0
Как определить, на какой колонке грида был клик (событие вяжется по bindevent - VFP8) ?
    #35138951
MiklS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно создать свой класс Header, и поменять стандртный на свой.
Ну а в Click Header
Код: plaintext
1.
This.Parent.Text1.SetFocus()
*Дальше процедура сортировки
...
Рейтинг: 0 / 0
Как определить, на какой колонке грида был клик (событие вяжется по bindevent - VFP8) ?
    #35140314
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй в твоем методе SortbyColumn через метод GridHitTest() определить значение Grid.RelativeColumn() и перевести фокус в эту колонку при помощи метода

Grid.ActivateCell(Row, Column)

К сожалению, идея "в лоб" связать, например, события Header.Click() и Column.SetFocus() через тот же BindEvent() не проходит.

Пример использования GridHitTest() в связке с BindEvents() (правда, для VFP9) можешь посмотреть здесь

Метод GridHitTest

Хотя, в общем случае, прав MiklS . Без собственного класса колонки и Header - не обойтись.
...
Рейтинг: 0 / 0
Как определить, на какой колонке грида был клик (событие вяжется по bindevent - VFP8) ?
    #35140597
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
strizh
Фигня в том, что если колонка была активна (то есть курсор на ней стоял), то ActiveColumn правильно показывает. А если щелкать только по хидерам - то ActiveColumn начинает показывать на 1 колонку. А как правильно все-таки определить, на каком объекте грида пользователь щелкает мышей ? Aevents() возвращает весь грид :(
Странно, AEVENTS(laEvnts, 0) у меня нормально возвращает Header ;-/
...
Рейтинг: 0 / 0
Как определить, на какой колонке грида был клик (событие вяжется по bindevent - VFP8) ?
    #35141015
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир, спасибо !
GridHitTest рулит !!!
...
Рейтинг: 0 / 0
Как определить, на какой колонке грида был клик (событие вяжется по bindevent - VFP8) ?
    #35141492
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обрати внимание на сообщение Kruchinin Pahan . Он предложил более простое и логичное решение.

Функция AEVENTS() если вторым параметром указан 0 вернет массив, содержащий ссылку на объект, вызвавший срабатывание BindEvents().

Т.е. в твоем случае получается что в методе SortbyColumn где-то в самом начале пишешь

Код: plaintext
1.
2.
3.
4.
5.
6.
LOCAL laSource( 1 )
=AEVENTS(laSource, 0 )

* Ссылка на столбец, в котором произошло событие Header1.Click()
LOCAL loColumn
loColumn = laSource[ 1 ].Parent

Далее просто работаешь с объектом. Например, прочитать источник данных

Код: plaintext
?m.loColumn.ControlSource
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как определить, на какой колонке грида был клик (событие вяжется по bindevent - VFP8) ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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