Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Переход по ячейкам в TStringGrid по клавиши Enter как по Tab

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

Переход по ячейкам в TStringGrid по клавиши Enter как по Tab

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

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
 begin
   if Key = #13 then
     with StringGrid1 do
       if Col then {next column}
         Col := Col + 1
     else if Row then
     begin {next Row}
       Row := Row + 1;
       Col := 1;
     end
      else
     begin {End of Grid- Go to Top again}
       Row := 1;
       Col := 1;
     end;
 end;

Перевод на русский язык:

Код, который я предоставил, - это процедура, обрабатывающая событие KeyPress для компонента TStringGrid. Цель этого кода - сделать кнопку Enter работать аналогично кнопке Tab при навигации по ячейкам в таблице.

Рассмотрим, что каждый часть кода делает:

  1. if Key = #13 then: Это проверяет, является ли нажатой клавишей клавишей Enter (ASCII-код 13).
  2. with StringGrid1 do: Это начинает блок with, позволяющий доступ к свойствам и методам компонента StringGrid1 без необходимости добавлять префикс StringGrid1..
  3. if Col then {next column}: Если текущая ячейка находится в последнем столбце таблицы (Col истинно), код устанавливает Col в 0 (т.е., перемещается на следующую строку) и затем устанавливает Row в 0, если новое положение выходит за пределы таблицы.
  4. else if Row then {next Row}: Если текущая ячейка находится в последней строке таблицы (Row истинно), код увеличивает Row на 1, сбрасывает Col в 0 (т.е., перемещается в первый столбец новой строки) и затем устанавливает Row в 0, если новое положение выходит за пределы таблицы.
  5. else {End of Grid - Go to Top again}: Если ни одна из этих условий не выполнена, код просто сбрасывает оба Row и Col в 1 (т.е., перемещается в верхнюю левую ячейку таблицы).

Основной проблемой с этим кодом является использование логических свойств (Col и Row) для отслеживания, находится ли ячейка в последнем столбце или строке. Это может привести к запутанной логике и потенциальным ошибкам.

Лучший подход - использовать целочисленные значения для отслеживания текущего положения в таблице, как показано ниже:

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
    with StringGrid1 do
      if Row < Rows - 1 then
        Inc(Row)
      else if Col < Columns - 1 then
        Inc(Col)
      else
        Row := 0;
end;

В этом измененном коде мы используем свойства Rows и Columns таблицы для определения, когда мы достигли нижней или правой границы. Мы также используем целочисленную арифметику для увеличения позиции строки или столбца, какneeded. Это делает логику более понятной и менее уязвимой к ошибкам.

В статье описывается способ изменения поведения TStringGrid в Delphi, чтобы переход по ячейкам при нажатии клавиши Enter происходит аналогично переходу при нажатии Tab.


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


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




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



:: Главная :: TStringGrid и TDrawGrid ::


реклама



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

Время компиляции файла: 2024-05-19 17:53:24
2024-05-19 23:55:58/0.0046579837799072/2