2017-07-08 8 views
1

Je souhaite qu'un fichier texte affiche le contenu de memo1 une fois que j'ai sélectionné 2 cases à cocher. Comment ferais-je cela?cochez plus d'une case pour exécuter la condition

J'ai essayé le code ci-dessous mais je n'arrive pas à le comprendre.

if CheckBox1.Checked and CheckBox2.Checked then 
begin 
memo1.lines.LoadFromFile('files\RS.txt'); 
end; 

Je veux aussi être en mesure de sélectionner les cases à cocher individuellement comme: (avoir signalé dans le cas où les combiner empêche de les vérifier individuellement)

checkBox1:

procedure TForm1.CheckBox1Change(Sender: TObject); 
begin 
    memo1.lines.LoadFromFile('files\R.txt'); 
end; 

Checkbox2:

procedure TForm1.CheckBox2Change(Sender: TObject); 
begin 
    memo1.lines.LoadFromFile('files\S.txt'); 
end; 

Toutes les suggestions/Améliorer Des mesures seront appréciées.

Exécution Lazarus IDE v1.6.4

de Windows 10 x64

Répondre

3

Pour autant que je compris que vous voulez que le comportement suivant:

  • Il y a deux cases à cocher
  • Il y a une note de service
  • En fonction de l'état des deux cases, le texte du champ Mémo doit être modifié

Si cette interprétation est correcte:

En général, je ne l'utilise pas Pascal mais votre problème semble être indépendant du langage de programmation utilisé. Je le ferais comme ceci:

Les deux procédures TForm1.CheckBox1Change et TForm1.CheckBox2Change sont appelées chaque fois que l'état de la case à cocher correspondant change.

Je voudrais écrire un troisième procedure et appeler ce troisième procedure des deux procédures. Je ne ferais rien d'autre que d'appeler ce troisième procedure dans les deux autres procédures.

Dans le troisième procedure je voudrais évaluer ce qu'il faut faire - en fonction de l'état des deux cases à cocher.

1

Une procédure checkboxchange distincte par événement est générée automatiquement par le concepteur si vous double-cliquez sur l'événement. Cependant, ce n'est pas une décision rigide.

Si vous avez le fragment de code initial, par ex. checkbox1change, vous pouvez simplement pointer le onchange de checkbox2 que checkbox1change existant en utilisant le menu déroulant de la onchange de checkbox2

4

Je présume que votre objectif est de générer un nom de fichier qui dépend de la combinaison particulière des états booléennes les deux cases à cocher - voir l'exemple de code ci-dessous. Le but de ceci est qu'il aide à séparer la définition de ce que vous voulez que le nom de fichier soit de ce que vous voulez faire avec lui.

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Memo1.Lines.LoadFromFile(GetFileName); 
end; 

function TForm1.GetFileName: String; 
begin 
    // Return empty string if neither checkbox is checked 
    Result := ''; 

    if Checkbox1.Checked and Checkbox2.Checked then 
    Result := 'files\RS.txt' 
    else // if we reach here only one of the checkboxes, or neither, is checked 
    if Checkbox1.Checked then 
     Result := 'files\R.txt' 
    else 
     if Checkbox2.Checked then 
     Result := 'files\S.txt' 
end; 

J'ai attribué une chaîne vide à la Result de la fonction au départ pour faire en sorte que le Result est toujours définie.

Important Vous remarquerez que le ci-dessus pas utiliser les événements de changement de cases à cocher. La raison en est que vous ne pouvez pas obtenir le résultat dont vous avez besoin (ou que vous attendez) si les événements Change ne sont jamais déclenchés - par exemple si un CheckBox est défini sur Checked dans l'IDE mais l'autre ne l'est pas. nom de fichier correct, que l'utilisateur ait ou non cliqué sur l'un d'entre eux.