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?

È stato utile?

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;
    }
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top