Come ottimizzare il funzionamento booleano?
Domanda
Ho due RadioButton
s: r1 e r2.
Devo abilitare entrambi su Enabled = true
e disabilitare solo deselezionato su 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;
}
}
}
}
Quale operatore devo usare per scrivere ogni condizione in una stringa?
Soluzione
La chiave è che la proprietà Enabled viene lasciata così com'è quando il valore è falso e la casella di controllo corrispondente è selezionata . Quindi prova questo:
public bool Enabled
{
set
{
r1.Enabled = !r1.Checked? value: value || r1.Enabled;
r2.Enabled = !r2.Checked? value: value || r2.Enabled;
}
}
o
public bool Enabled
{
set
{
r1.Enabled = r1.Checked? value || r1.Enabled: value;
r2.Enabled = r2.Checked? value || r2.Enabled: value;
}
}
Altri suggerimenti
Quanto segue sarebbe simile a quello che stai facendo, ma hai un caso non gestito nel tuo codice originale: if ((! value) & amp; & amp; (r1.Checked)), r1.Enabled non è mai set (stessa condizione per r2). Se si imposta r1.Enabled e r2.Enabled su true, per impostazione predefinita, da qualche parte, il seguente codice potrebbe essere sufficiente.
r1.Enabled = value || r1.Checked; r2.Enabled = value || r2.checked;
Se hai strane dipendenze, non vedo nulla di particolarmente pulito ...
Penso che sia abbastanza chiaro:
public bool Enabled
{
set
{
if (value || !r1.checked) {
r1.Enabled = value;
}
if (value || !r2.checked) {
r2.Enabled = value;
}
}
}