2016-11-07 6 views
2

j'ai un TGrid sur FMX avec 3 colonnes, la deuxième colonne est Visible False, si je clique sur la première colonne et appuyez sur la flèche pour se concentrer sur la colonne suivante visible, le curseur ne va pas à la troisième colonne, il disparaît, comme s'il se concentrait sur la deuxième colonne, et si j'appuie de nouveau sur la flèche, il se dirige vers la troisième colonne.Delphi FireMonkey Grille: Colonnes Invisible en mode Navigation

Comment puis-je résoudre ce problème?

Répondre

1

Utilisez l'événement OnSelectCell comme suit:

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, vous ne dites pas quelle version de Delphi que vous utilisez, et il y a des différences. S'il vous plaît, lorsque vous demandez environ Firemonkey, toujours étiqueter la question avec votre version de Delphi. Voici une mise à jour:

  • Dans Delphi 10.1 Berlin, le correctif ci-dessus n'est pas nécessaire.

  • Dans Delphi 10 Seattle et plus tôt (je l'ai vérifié jusqu'à XE6) le correctif est nécessaire

Vous pouvez également remarqué que la sélection dans l'autre sens (de droite à gauche) fonctionne sans le correctif dans versions Delphi 10 Seattle et plus tôt (ce qui explique pourquoi seulement ACol + 1 doit être considéré).

+0

Merci @Tom Brunberg, a parfaitement fonctionné, j'ai seulement ajouté un 'if (Sender as TGrid) .ColumnByIndex (ACol + 1) <> nil then' avant de sélectionner la colonne suivante –

+0

@Tallys Ferrante Vous êtes les bienvenus! Je ne vois pas pourquoi votre addition serait nécessaire. Alors, avec quelle version travaillez-vous? –

+0

J'utilise Delphi Seattle. J'ajoute cette vérification car ma dernière colonne est invisible aussi, donc si l'utilisateur appuie involontairement sur la flèche, l'application ne soulève pas de violation d'accès en essayant de sélectionner la colonne suivante (qui n'existe pas). –