Помощь - Поиск - Пользователи - Календарь
Полная версия: setfocus в DBGrid - ?
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
1147
На PageControl1 несколько TabSheet (Tabsheet1-...Tabshitn). На каждой TabSheet по одной DBGrid, но для всех DBGrid служит источником 1 ADOTable.
При работе на первой странице, при нажатии кнопки которая перемещает курсор на DBGrid
ADOTable1.FieldByName('Номера').FocusControl;

ничего не происходит, т.к. есть таблицы с такими же ресурсами на других страницах. Можно ли как-нибудь указать программе что нужно перемещать курсор именно на ту таблицу, которая находится на активной странице?
Мне кажется что здесь кроме удаления повторяющихся таблиц ничего не поможет..
volvo
Если на закладке с №1 лежит DBGrid1, и так далее (т.е., если номер грида совпадает с номером закладки), то можно сделать такой "финт ушами": изначально установить всем Гридам DataSource = nil, и только одному, который лежит на активной странице PageControl-а, дать нормальное значение, а при переключении на другую вкладку делать вот что: (если у тебя все Гриды связаны с одной таблицей, значит, и DataSource везде один и тот же, правда?).

Итого, вешаем на событие OnChange PageControl-а вот такую процедуру:
procedure TForm1.PageControl1Change(Sender: TObject);
var i: integer;
begin
// "Гасим" Грид с предыдущей активной страницы
for i := 0 to (Sender as TPageControl).PageCount - 1 do
(FindComponent('DBGrid' + IntToStr(i + 1)) as TDBGrid).DataSource := nil;

// и "зажигаем" на теперешней активной...
(FindComponent('DBGrid' +
IntToStr((Sender as TPageControl).ActivePageIndex + 1)) as TDBGrid).DataSource := DataSource1;
end;

, и нажимаем на кнопку, код которой ты привел. Поскольку других активных ДБГридов в приложении нет, то будет изменяться именно тот, который на текущей вкладке. Причем я пробовал сделать всем остальным Enabled := False - это не помогает, помог только сброс DataSource...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.