Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Перейти по Enter на следующее поле в TDBGrid

Delphi , Компоненты и Классы , TDBGrid

Перейти по Enter на следующее поле в TDBGrid

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
 begin
   if Key = #13 then
   begin
     if DBGrid1.Columns.Grid.SelectedIndex < DBGrid1.Columns.Count - 1 then
       DBGrid1.Columns[DBGrid1.Columns.grid.SelectedIndex + 1].Field.FocusControl
     else
     begin
       Table1.Next;
       DBGrid1.Columns[0].field.FocusControl;
     end;
   end;
 end;

Here's the translation of the text into Russian:

Это обработчик события для компонента TDBGrid, именуемого DBGrid1. Событие тригерируется при нажатии клавиши, когда grid имеет фокус.

Код проверяет, является ли нажатой клавишей Enter (#13). Если это так, он выполняет разные действия в зависимости от того, является ли выбранной колонкой не последней в grid:

  • Если выбранная колонка не последняя, он фокусирует следующую колонку, вызвав метод FocusControl для поля следующей колонки.
  • Если выбранная колонка последняя, он перемещается к следующему записи в underlying table (Table1.Next) и затем устанавливает фокус на поле первой колонки.

Код использует свойство SelectedIndex column grid'а для определения, которая колонка выбрана в данный момент. Он также использует свойство Count для проверки, есть ли более колонок после текущей.

Вот альтернативное решение, которое может быть более читаемым и поддерживаемым:

procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    if DBGrid1.FocusedColumn < DBGrid1.Columns.Count - 1 then
      DBGrid1.Columns[DBGrid1.FocusedColumn + 1].Field.Focus
    else
    begin
      Table1.Next;
      DBGrid1.Columns[0].Field.Focus;
    end;
  end;
end;

В этом коде я заменил DBGrid1.Columns.Grid.SelectedIndex на DBGrid1.FocusedColumn, что является более прямым способом получения индекса текущей фокусированной колонки. Я также удалил неиспользуемый блок begin...end вокруг заявления о фокусе.

Обратите внимание, что я предполагаю, что Table1 - это компонент TTable или эквивалентный источник данных для grid. Если это не так, вам нужно будет адаптировать код соответствующим образом.

В статье описывается решение проблемы перехода к следующему полю в TDBGrid при нажатии Enter, включая обработку случаев, когда это последнее поле и необходимо перейти к началу списка.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TDBGrid ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:17:11/0.0053651332855225/1