Comment optimiser le fonctionnement booléen?
Question
J'ai deux RadioButton
s: r1 et r2.
Je dois activer à la fois le Enabled = true
et désactiver uniquement la case décochée le Enabled = false
public bool Enabled
{
set
{
if(value)
{
r1.Enabled = value; // true
r2.Enabled = value;
}
else
{
if(!r1.Checked)
{
r1.Enabled = value; // false if not checked
}
if(!r2.Checked)
{
r2.Enabled = value;
}
}
}
}
Quel opérateur dois-je utiliser pour écrire chaque condition dans une chaîne?
La solution
La clé est que la propriété Enabled est laissée telle quelle lorsque la valeur est false et que la case à cocher correspondante est cochée . Alors essayez ceci:
public bool Enabled
{
set
{
r1.Enabled = !r1.Checked? value: value || r1.Enabled;
r2.Enabled = !r2.Checked? value: value || r2.Enabled;
}
}
ou
public bool Enabled
{
set
{
r1.Enabled = r1.Checked? value || r1.Enabled: value;
r2.Enabled = r2.Checked? value || r2.Enabled: value;
}
}
Autres conseils
Ce qui suit serait similaire à ce que vous faites, mais vous avez un cas non traité dans votre code d'origine: if ((! valeur) & amp; & amp; (r1.Checked)), r1.Enabled n'est jamais set (même condition pour r2). Si vous définissez r1.Enabled et r2.Enabled sur true, le code suivant peut être suffisant quelque part par défaut.
r1.Enabled = value || r1.Checked; r2.Enabled = value || r2.checked;
Si vous avez des dépendances étranges, je ne vois rien de particulièrement propre ...
Je pense que cela est assez clair:
public bool Enabled
{
set
{
if (value || !r1.checked) {
r1.Enabled = value;
}
if (value || !r2.checked) {
r2.Enabled = value;
}
}
}