На PageControl1 несколько TabSheet (Tabsheet1-...Tabshitn). На каждой TabSheet по одной DBGrid, но для всех DBGrid служит источником 1 ADOTable. При работе на первой странице, при нажатии кнопки которая перемещает курсор на DBGrid
ADOTable1.FieldByName('Номера').FocusControl;
ничего не происходит, т.к. есть таблицы с такими же ресурсами на других страницах. Можно ли как-нибудь указать программе что нужно перемещать курсор именно на ту таблицу, которая находится на активной странице? Мне кажется что здесь кроме удаления повторяющихся таблиц ничего не поможет..
volvo
1.09.2009 12:47
Если на закладке с №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...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.