2016-11-07 8 views
2

я есть TGrid на FMX с 3 колонны, второй столбец Visible False, если я нажму на первый столбец и нажмите стрелку, чтобы сосредоточиться на следующей видимой колонке, курсор не идет в третий столбец он исчезает, как если бы он фокусировался на втором столбце, и если я снова нажимаю стрелку, он переходит в третий столбец.Delphi FireMonkey сетки: Невидимые Столбцы При навигации

Как я могу это исправить?

ответ

1

Используйте OnSelectCell событие следующим образом:

procedure TForm7.Grid1SelectCell(Sender: TObject; const ACol, ARow: Integer; 
    var CanSelect: Boolean); 
begin 
    if not (Sender as TGrid).Columns[ACol].Visible then 
    begin 
    CanSelect := False; 
    if (Sender as TGrid).ColumnByIndex(ACol+1) <> nil then 
     (Sender as TGrid).SelectColumn(ACol+1); 
    end; 
end; 

Btw, вы не сказали, какая версия Delphi вы используете, и есть различия. Пожалуйста, задавая вопрос о Firemonkey, всегда указывайте вопрос своей версией Delphi. Вот обновление:

  • В Delphi 10.1 Berlin вышеуказанное исправление не требуется.

  • В Delphi 10 Сиэтла и ранее (я проверил до XE6) исправления необходим

Вы также могли заметить, что при выборе в другом направлении (справа налево) работает без исправления в версии Delphi 10 Seattle и ранее (что объясняет, почему нужно учитывать только ACol + 1).

+0

Спасибо @Tom Brunberg, работал отлично, я только добавил 'if (Sender as TGrid) .ColumnByIndex (ACol + 1) <> nil then' перед тем, как выбрать следующий столбец –

+0

@Tallys Ferrante Добро пожаловать! Я не понимаю, почему ваше добавление было бы необходимо. Итак, в какой версии вы работаете? –

+0

Я использую Delphi Сиэтл. Я добавляю эту проверку, потому что мой последний столбец тоже невидим, поэтому, если пользователь непреднамеренно нажимает стрелку, приложение не вызывает нарушения доступа при попытке выбрать следующий столбец (которого не существует). –