2010-05-19 2 views
0

Comment mettre automatiquement en surbrillance la première entrée d'une DBLookupListBox sans que l'utilisateur final ne la mette en surbrillance.Delphi - Comment mettre automatiquement en surbrillance la première entrée dans une DBLookupListBox lors de la création d'un formulaire

procedure TForm2.FormCreate(Sender: TObject); 
begin 
    Form2.ActiveControl := DBLookupListBox1; 
end; 

Mais cela ne fonctionne pas, j'ai aussi essayé DBLookupListBox1.setfocus sur la forme de créer, mais cela donne une erreur, parce que le DBLookupListBox est pas encore créé.

Merci

-Brad

+1

Avez-vous essayé SetFocus dans l'événement OnActivate? – Wodzu

+1

Que voulez-vous dire par "higlight"? Voulez-vous dire la mise au point? Ou voulez-vous dire sélectionner la première entrée dans la boîte de recherche? –

+0

J'ai essayé DBLookupListBox1.SetFocus; onActive, il montre la "boîte" autour du 1er élément, mais elle n'est pas mise en surbrillance. – Brad

Répondre

1

Je n'ai pas testé, mais je suppose que vous devez utiliser SetFocus dans l'événement OnShow du formulaire pour activer le contrôle.

procedure TForm2.FormShow(Sender: TObject); 
begin 
    DBLookupListBox1.SetFocus; 
end; 


Définition d'une valeur par défaut est un peu plus compliqué parce que le DBLookupListBox est DB-aware. Une approche consiste à définir les valeurs par défaut dans les jeux de données OnNewRecord événement ou AfterInsert événement:

procedure TMyDataModule.cdsMyClientDataSetNewRecord(DataSet: TDataSet); 
begin 
    cdsMyClientDataSetMYPERSISTENTFIELDNAME.Value := 0; 
end; 


Si vous souhaitez tout de même faire du formulaire:

procedure TForm2.FormShow(Sender: TObject); 
const 
    DEFAULT = 0; 
var 
    S: String; 
begin 
    S := DBLookupListBox1.DataField; 

    if DBLookupListBox1.DataSource.DataSet.FieldByName(S).IsNull then 
    begin 
    DBLookupListBox1.DataSource.DataSet.Edit; 
    DBLookupListBox1.DataSource.DataSet.FieldByName(S).Value := DEFAULT; 
    DBLookupListBox1.DataSource.DataSet.Post; 
    end; 
end; 


à mon humble avis:
La définition de valeurs par défaut doit être considérée comme une logique métier et appartient donc au DataModule.

Le réglage du focus approprié est GUI-logic et doit être fait dans le formulaire.

+0

Je n'ai pas besoin de définir les valeurs par défaut, assurez-vous simplement qu'il est en surbrillance. – Brad

+0

Pourquoi voudriez-vous que le composant DB-aware affiche une valeur qui n'existe pas réellement dans la base de données? Parce que c'est ce sur quoi porte la surbrillance - représentant la valeur DB. Lorsque l'utilisateur insère un enregistrement, le composant compatible avec la base de données doit afficher la valeur réelle de ce champ. Pas autre chose. Si l'ensemble de données est vide, il n'y a aucune valeur à afficher dans le composant compatible DB ... –

+0

Les données existent dans la base de données. Je veux juste que le premier élément soit sélectionné et mis en surbrillance, afin que vous sachiez que cet élément est celui en question. Il sélectionne automatiquement le 1er élément mais il ne l'affiche pas en surbrillance. – Brad

Questions connexes