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?

Était-ce utile?

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;
    }
  }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top