Quel bouton radio est sélectionné dans un TRadioGroup?
-
22-09-2019 - |
Question
Comme vous pouvez le voir dans l'histoire de ma question, je développe un gestionnaire de livre électronique, qui sera open source et je libérer dans environ 10 jours, mais j'ai un TRadioGroup
, comme vous pouvez le voir:
TRadioGroup utilisé sur mon formulaire http://img85.imageshack.us/img85/1830/radiogroup. PNG
Et je veux stocker somethings dans une variable (qui doit être un Integer
) qui sera « lié » à cette TRadioGroup
.
Je dois faire une fonction if
comme ceci:
Légende de la TRadioButton -> Nombre qui devront être stockés dans la variable
Fit 2xWidth - Par défaut -> 0
Fit 2xHeight -> 1
Ajuster à la largeur -> 2
Ajuster à la hauteur -> 3
Mais je viens d'utiliser un TRadioGroup
et un TRadioButton
une fois, différent de celui en C # que je l'ai utilisé plus de 20 fois. Ensuite, je veux savoir ce que je dois mettre sur la fonction si, parce que ce qu'il va faire, je sais déjà comment faire:
var
num: Integer;
begin
if(TRadioButton1 checked?)
begin
num := 0;
end;
end.
Qu'est-ce que je dois mettre à l'intérieur des crochets de la fonction if
?
PS: Je vais mettre les crédits au programme pour le peuple qui m'a aidé dans ce petit projet
.La solution
A TRadioButton a la propriété vérifié. Mais un TRadioGroup a la propriété ItemIndex.
Les éléments d'un TRadioGroup sont stockées en utilisant un TStrings. Ainsi, vous pouvez associer un objet à chaque option et vous pouvez jeter un entier à un TObject à stocker.
Exemple:
// fill the radiogroup
radiogroup.Items.AddObject('Fit 2xWidth', TObject(0));
radiogroup.Items.AddObject('Fit 2xHeight', TObject(1));
radiogroup.Items.AddObject('Fit Width', TObject(2));
radiogroup.Items.AddObject('Fit Height', TObject(3));
radiogroup.ItemIndex := 0;
Pour lire le réglage actuel:
value := radiogroup.ItemIndex;
Ou pour obtenir le nombre entier associé:
index := radiogroup.ItemIndex;
Assert(index>=0); // Sanity check
value := Integer(radiogroup.Items.Objects[index]);
Dans votre cas, les valeurs sont de 0 à 3, vous pouvez utiliser le ItemIndex.
Comme une note, si ce n'est pas une fonction. Une fonction est un morceau de code qui renvoie une valeur sur la base des paramètres d'entrée. Si est une déclaration, qui est une commande qui peut être exécutée. L'instruction if est particulière, car elle vous permet d'exécuter une instruction différente en fonction de la condition if.
Autres conseils
Juste une petite astuce:. Réglage .ItemIndex
n'envoie pas le focus du clavier à l'élément de la radio, je sais comment le résoudre, continuez la lecture
Au lieu de sélectionner par code radio dans un RadioGroup en mettant en .ItemIndex
il est préférable de le faire en envoyant l'accent sur l'élément radio; juste pour être très clair. Je veux dire l'envoi de se concentrer uniquement sur l'élément radio, et non l'ensemble du groupe radio
Au lieu de: radiogroup.itemindex:=TheIndex;
Faites comme ceci: TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;
Il fera l'objet de la radio à sélectionner et envoyer le focus du clavier à lui , il affiche le rectangle en pointillé arroud, tout comme si l'utilisateur avait cliqué dessus.
Remarque 1: Pour voir dans les touches de curseur du clavier d'utilisation d'action et de comparer behavor de mettre juste .ItemIndex
et l'envoi de mise au point au point radio
Note2. Si vous utilisez TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;
alors il n'y a pas inutile de définir .ItemIndex
du tout, il sera également fait
L'espoir qui aide une personne ayant le même problème que moi, quand le besoin de le fixer par code, par exemple pour éviter behavor du clavier circulaire, par exemple pour le rendre à rester sur le dernier élément de la radio lorsque dernier élément radio est sélectionné et à droite du clavier le curseur est enfoncé, même pour le premier.